ไปภาษาคำสั่งเลือก
เลือกไปเป็นโครงสร้างการควบคุมในคำสั่งที่คล้ายกันสำหรับสวิทช์ในการสื่อสาร แต่ละกรณีจะต้องมีการดำเนินการสื่อสารทั้งการส่งหรือรับ
เลือกการดำเนินการกรณีการสุ่มสามารถเรียกใช้ หากมีกรณีที่จะเรียกใช้ไม่มีก็จะถูกบล็อกจนกว่าคดีจะสามารถทำงานได้ ประโยคเริ่มต้นควรจะทำงาน
ไวยากรณ์
ไปเขียนโปรแกรมไวยากรณ์ภาษาคำสั่งเลือกจะเป็นดังนี้:
select { case communication clause : statement(s); case communication clause : statement(s); /* 你可以定义任意数量的 case */ default : /* 可选 */ statement(s); }
ต่อไปนี้จะอธิบายถึงไวยากรณ์ของคำสั่งที่เลือก:
- แต่ละกรณีจะต้องมีการสื่อสาร
- การแสดงออกของช่องทั้งหมดจะได้รับการประเมิน
- การแสดงออกทั้งหมดจะถูกส่งไปได้รับการประเมิน
- ถ้ามีการสื่อสารอาจจะใด ๆ ที่จะดำเนินการคนอื่น ๆ จะถูกละเลย
- หากกรณีที่มากกว่าหนึ่งสามารถทำงานเลือกจะสุ่มเลือกการดำเนินการที่เป็นธรรม อื่น ๆ ไม่ได้รับการดำเนินการ
มิฉะนั้น:- หากมีข้อเริ่มต้นคำสั่งจะถูกดำเนินการ
- หากมีข้อเริ่มต้นไม่เลือกบล็อกจนถึงการสื่อสารอาจทำงาน; ไปที่ช่องหรือไม่คุ้มค่าการประเมินอีกครั้ง
ตัวอย่าง
package main import "fmt" func main() { var c1, c2, c3 chan int var i1, i2 int select { case i1 = <-c1: fmt.Printf("received ", i1, " from c1\n") case c2 <- i2: fmt.Printf("sent ", i2, " to c2\n") case i3, ok := (<-c3): // same as: i3, ok := <-c3 if ok { fmt.Printf("received ", i3, " from c3\n") } else { fmt.Printf("c3 is closed\n") } default: fmt.Printf("no communication\n") } }
รหัสข้างต้นจะถูกดำเนินการเป็นผลมาจาก:
no communication