วันพุธที่ 22 มีนาคม พ.ศ. 2560

Go Language Example 9

Go by Example: Channel Synchronization

เราสามารถใช้ Channel เพื่อประสานการทำงานข้าม goroutines นี่คือตัวอย่างของการใช้การบล็อกที่ได้รับเพื่อรอให้เสร็จสิ้น goroutine


• นี่คือฟังก์ชั่นที่เราจะเรียกใช้ใน goroutine แชแนลที่ทำจะถูกใช้เพื่อแจ้งให้ผู้อื่นทราบว่างานนี้เสร็จสิ้นแล้ว
• ส่งค่าเพื่อแจ้งว่าเราทำเสร็จแล้ว | done <- true
• เริ่มต้น goroutine ของผู้ปฏิบัติงานเพื่อให้เป็นช่องทางในการแจ้งเตือน
• บล็อกจนกว่าเราจะได้รับการแจ้งเตือนจากคนงานใน Channel
• ถ้าคุณลบบรรทัด <- done ออกจากโปรแกรมนี้โปรแกรมจะออกก่อนที่พนักงานจะเริ่ม


Go by Example: Channel Directions
เมื่อใช้ช่องเป็นพารามิเตอร์ฟังก์ชันคุณสามารถระบุได้ว่าช่องต้องการส่งเฉพาะหรือรับค่าเท่านั้น ความจำเพาะนี้เพิ่มความปลอดภัยของโปรแกรม


• ฟังก์ชัน ping นี้ยอมรับเฉพาะช่องสำหรับส่งค่าเท่านั้น นี่เป็นข้อผิดพลาดในการคอมไพล์เพื่อรับช่องนี้
func ping(pings chan<- string, msg string) {
    pings <- msg
}
• ฟังก์ชั่น pong  ยอมรับ channel  หนึ่งเพื่อรับ (ping) และหนึ่งวินาทีสำหรับส่ง (pong )


Go by Example: Select
การเลือกของ Go ช่วยให้คุณรอการดำเนินงานหลายช่อง การรวม goroutines และช่องทางที่มีการเลือกเป็นคุณลักษณะที่มีประสิทธิภาพของ Go


• ตัวอย่างเช่นเราจะเลือกทั้งสอง channel c1 := make(chan string)
                                                                    c2 := make(chan string)
• แต่ละ channel จะได้รับค่าหลังจากระยะเวลาหนึ่งเพื่อจำลองตัวอย่างเช่น การปิดกั้นการดำเนินงานของ RPC ที่ดำเนินการใน goroutines พร้อมกัน
• เราจะใช้ตัวเลือกเพื่อรอค่าทั้งสองค่านี้พร้อมกันพิมพ์แต่ละรายการตามที่มาถึง
for i := 0; i < 2; i++ {
        select {
        case msg1 := <-c1:
            fmt.Println("received", msg1)
        case msg2 := <-c2:
            fmt.Println("received", msg2)
        }
• เราได้รับค่า "หนึ่ง" และ "สอง" ตามที่คาดไว้
• โปรดทราบว่าเวลาในการดำเนินการทั้งหมดอยู่ที่ประมาณ 2 วินาทีเนื่องจากทั้ง 2 และ 2 วินาทีมีการใช้งานพร้อมกัน


Credit By :https://gobyexample.com/


ขอบคุณที่เข้ามาดูกันนะคับ


##########ฝากติดตามเพจของพวกเราด้วยนะคับ############