ก่อนอื่นพื้นหลัง ไวยากรณ์ที่เป็นทางการของ Go ใช้อัฒภาค";"
เป็นตัวยุติในการผลิตหลายรายการ แต่โปรแกรม Go อาจละเว้นส่วนใหญ่ (และควรมีแหล่งที่มาที่ชัดเจนและอ่านง่ายgofmt
นอกจากนี้ยังลบอัฒภาคที่ไม่จำเป็นออกไปด้วย)
ข้อกำหนดแสดงรายการกฎที่แน่นอน Spec: อัฒภาค:
ไวยากรณ์อย่างเป็นทางการใช้อัฒภาค ";" ในฐานะผู้ยุติการผลิตในหลาย ๆ โปรดักชั่น โปรแกรม Go อาจละอัฒภาคเหล่านี้เกือบทั้งหมดโดยใช้กฎสองข้อต่อไปนี้:
เมื่ออินพุตถูกแบ่งออกเป็นโทเค็นอัฒภาคจะถูกแทรกโดยอัตโนมัติในสตรีมโทเค็นทันทีหลังจากโทเค็นสุดท้ายของบรรทัดหากโทเค็นนั้น
ในการอนุญาตให้คำสั่งที่ซับซ้อนครอบครองบรรทัดเดียวอัฒภาคอาจถูกละไว้ก่อนปิด ")" หรือ "}"
ดังที่คุณสามารถดูได้ว่าคุณแทรกอักขระขึ้นบรรทัดใหม่หลังวงเล็บ)
หรือไม่อัฒภาค;
จะถูกแทรกโดยอัตโนมัติดังนั้นบรรทัดถัดไปจะไม่ถือเป็นความต่อเนื่องของบรรทัดก่อนหน้า นี่คือสิ่งที่เกิดขึ้นในกรณีของคุณดังนั้นบรรทัดถัดไปที่เริ่มต้นด้วย.Scan(&ReadUser.ID,...
จะทำให้คุณมีข้อผิดพลาดเวลาคอมไพล์ตามนี้เอง (โดยไม่มีบรรทัดก่อนหน้า) เป็นข้อผิดพลาดเวลาคอมไพล์:syntax error: unexpected .
ดังนั้นคุณอาจล้ำเส้นของคุณเมื่อใดก็ได้ที่ไม่ขัดแย้งกับกฎที่ระบุไว้ในจุด1.
ข้างต้น
โดยปกติแล้วคุณสามารถทำลายเส้นของคุณหลังจากที่จุลภาค,
หลังจากเปิดวงเล็บเช่น(
, [
, {
และหลังจากจุด.
ซึ่งอาจจะอ้างอิงข้อมูลหรือวิธีการของค่าบางอย่าง คุณยังสามารถแตกไลน์ของคุณหลังจากตัวดำเนินการไบนารี (ซึ่งต้องใช้ตัวถูกดำเนินการ 2 ตัว) เช่น:
i := 1 +
2
fmt.Println(i)
สิ่งหนึ่งที่ควรสังเกตที่นี่คือถ้าคุณมีโครงสร้างหรือสไลซ์หรือแมปตามตัวอักษรแสดงรายการค่าเริ่มต้นและคุณต้องการแบ่งบรรทัดหลังจากแสดงรายการค่าสุดท้ายคุณต้องใส่เครื่องหมายจุลภาคที่จำเป็น,
แม้ว่านี่จะเป็นค่าสุดท้ายและไม่มี จะตามมาอีกเช่น:
s := []int {
1, 2, 3,
4, 5, 6,
}
เพื่อให้สอดคล้องกับกฎอัฒภาคและเพื่อให้คุณสามารถจัดเรียงและเพิ่มบรรทัดใหม่ได้โดยไม่ต้องดูแลการเพิ่ม / ลบเครื่องหมายจุลภาคสุดท้าย เช่นคุณสามารถสลับ 2 บรรทัดโดยไม่ต้องลบและเพิ่มลูกน้ำใหม่:
s := []int {
4, 5, 6,
1, 2, 3,
}
เช่นเดียวกับเมื่อแสดงรายการอาร์กิวเมนต์ในการเรียกใช้ฟังก์ชัน:
fmt.Println("first",
"second",
"third",
)