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/
ขอบคุณที่เข้ามาดูกันนะคับ
##########ฝากติดตามเพจของพวกเราด้วยนะคับ############