ในบทความนี้ เราจะมาศึกษาวิธีการใช้ เลือกคำสั่ง ใน Golang และให้ตัวอย่างเพื่อช่วยให้คุณบรรลุความเท่าเทียม การทำงานพร้อมกัน และการซิงโครไนซ์ในโปรแกรม Go
จะใช้ Select Statement ใน Golang ได้อย่างไร?
คล้ายกับคำสั่ง switch คือ เลือกคำสั่ง อนุญาตให้เราเลือกและดำเนินการหนึ่งนิพจน์จากหลายๆ นิพจน์ แต่ความแตกต่างหลักระหว่าง เลือก และสวิตซ์ก็คือว่า เลือกคำสั่ง ฟังก์ชั่นบนหลักการรอซึ่งหมายความว่า เลือกคำสั่ง จะไม่ดำเนินการจนกว่าการสื่อสารจะเสร็จสมบูรณ์
ในที่นี้ การสื่อสารหมายถึงการส่งและรับข้อมูลผ่านช่องทางที่กำหนด เมื่อการสื่อสารเสร็จสิ้น จะมีการตรวจสอบครั้งต่อไป ทำให้เราเห็นว่าข้อความเลือกของภาษา Go นั้นขึ้นอยู่กับช่องสัญญาณทั้งหมด
ไวยากรณ์สำหรับคำสั่ง Select
ไวยากรณ์อย่างง่ายที่ใช้สำหรับ เลือกคำสั่ง การใช้ภาษา Go แสดงอยู่ด้านล่าง:
เลือก {
กรณี ช่อง_1 :
// รหัสที่จะดำเนินการเมื่อ channel_1 พร้อม
กรณี ช่อง_2 :
// รหัสที่จะดำเนินการเมื่อ channel_2 พร้อม
กรณี ช่อง_3 :
// รหัสที่จะดำเนินการเมื่อ channel_3 พร้อม
กรณี ช่อง_4 :
// รหัสที่จะดำเนินการเมื่อ channel_4 พร้อม
ค่าเริ่มต้น :
// รหัสที่จะดำเนินการหากไม่มีช่องทางใดพร้อม
}
ที่นี่:
- ภายใน เลือกคำสั่ง แต่ละกรณีแสดงถึงการดำเนินการช่องสัญญาณ ซึ่งสามารถเป็นการดำเนินการรับหรือการส่ง
- เดอะ เลือกคำสั่ง รอจนกว่ากรณีใดกรณีหนึ่งจะพร้อม จากนั้นเรียกใช้และคำสั่งกรณีที่เกี่ยวข้อง
- มันสุ่มเลือกช่องในกรณีที่มีหลายช่องพร้อมที่จะดำเนินการ
วิธีสร้างช่องใน Golang
หากต้องการสร้างช่องใน Go ผู้ใช้สามารถใช้ฟังก์ชัน make ตามด้วย ชาน คำหลักและระบุประเภทช่องซึ่งอาจเป็น int, string หรืออื่นๆ
ช := ทำ ( ประเภทจัง )ใช้ Select Statement ใน Golang
ที่นี่ เราจะแสดงตัวอย่างต่างๆ เพื่อช่วยให้คุณเรียนรู้พื้นฐานการใช้ เลือกคำสั่ง ในโกลัง.
ตัวอย่างที่ 1
ตัวอย่างต่อไปนี้ของ เลือกคำสั่ง สาธิตวิธีการทำงานเมื่อทั้งสองช่องพร้อมที่จะดำเนินการ
แพคเกจหลักนำเข้า 'เอฟเอ็มที'
ฟังก์ชั่นหลัก ( ) {
ในหนึ่ง := ทำ ( ชาน นานาชาติ )
สตริง := ทำ ( สตริงจัง )
ไป chan_num ( ในหนึ่ง )
ไป chan_str ( สตริง )
เลือก {
กรณี Ch1 := <- ในหนึ่ง :
เอฟเอ็มที พิมพ์ ( 'ข้อมูลช่อง:' , Ch1 )
กรณี Ch2 := <- สตริง :
เอฟเอ็มที พิมพ์ ( 'ข้อมูลช่อง:' , Ch2 )
}
}
ฟังก์ชั่น chan_num ( หนูจัง นานาชาติ ) {
ในหนึ่ง <- 67
}
ฟังก์ชั่น chan_str ( สตริง str ชาน ) {
สตริง <- 'ลีนุกซ์'
}
ในตัวอย่างข้างต้น เราสร้างสองช่อง ในหนึ่ง และ สตริง และเราใช้ฟังก์ชัน Go chan_num() เพื่อส่งข้อมูลไปยังช่อง num และ chan_str() เพื่อส่งข้อมูลไปยังช่อง str เนื่องจากโปรแกรมมีสองช่องทางที่แตกต่างกัน เราจึงใช้ เลือกคำสั่ง เพื่อดำเนินการอย่างใดอย่างหนึ่ง
กรณี Ch1 อ่านค่าจาก หมายเลขช่อง และแสดงมัน ในทำนองเดียวกันกรณี Ch2 ส่งกลับค่าจาก สตริง ช่อง. โปรแกรมด้านบนส่งคืนเอาต์พุตของช่องสัญญาณที่พร้อมใช้งาน เอาต์พุต
ตัวอย่างที่ 2
หากคุณต้องการเพิ่มการหน่วงเวลาให้กับแชนเนลและส่งคืนเอาต์พุตของแชนเนลอื่น คุณสามารถใช้ เวลานอน () ทำงานในช่องที่กำหนด สิ่งนี้ทำให้คุณสามารถพิมพ์เอาต์พุตของช่องสัญญาณอื่นไปยังคอนโซลได้ นี่คือตัวอย่างของกรณีดังกล่าว
แพคเกจหลักนำเข้า (
'เอฟเอ็มที'
'เวลา'
)
ฟังก์ชั่นหลัก ( ) {
ในหนึ่ง := ทำ ( ชาน นานาชาติ )
สตริง := ทำ ( สตริงจัง )
ไป chan_num ( ในหนึ่ง )
ไป chan_str ( สตริง )
เลือก {
กรณี Ch1 := <- ในหนึ่ง :
เอฟเอ็มที พิมพ์ ( 'ข้อมูลช่อง:' , Ch1 )
กรณี Ch2 := <- สตริง :
เอฟเอ็มที พิมพ์ ( 'ข้อมูลช่อง:' , Ch2 )
}
}
ฟังก์ชั่น chan_num ( หนูจัง นานาชาติ ) {
ในหนึ่ง <- 67
}
ฟังก์ชั่น chan_str ( สตริง str ชาน ) {
เวลา . นอน ( 5 * เวลา . ที่สอง )
สตริง <- 'ลีนุกซ์'
}
ในรหัสที่กำหนดข้างต้น เราใช้ เวลานอน() ฟังก์ชั่นภายใน chan_str() การทำงาน. เฉพาะช่อง num เท่านั้นที่พร้อมสำหรับการดำเนินการใน 5 วินาทีแรก ส่งผลให้ เลือกคำสั่ง เรียกใช้กรณี Ch1 .
เอาต์พุต
บันทึก: คุณสามารถเพิ่มการหน่วงเวลาให้กับทั้งสองแชนเนลเพื่อชะลอการดำเนินการของแชนเนล
บทสรุป
เดอะ เลือกคำสั่ง ใน Go ช่วยให้สามารถเลือกและดำเนินการหนึ่งนิพจน์จากหลายนิพจน์โดยใช้หลักการรอ โดยที่คำสั่งจะไม่ดำเนินการจนกว่าการสื่อสารจะเสร็จสิ้น แนวปฏิบัติดังกล่าวข้างต้นประกอบด้วย เลือกคำสั่ง ไวยากรณ์พื้นฐานและตัวอย่าง