เมื่อเราตรวจสอบซอร์สโค้ดของไลบรารีมาตรฐาน Go เราจะเห็นว่าgoto
s ถูกนำไปใช้จริงที่ไหน
ยกตัวอย่างเช่นในmath/gamma.go
ไฟล์คำสั่งที่ใช้ :goto
for x < 0 {
if x > -1e-09 {
goto small
}
z = z / x
x = x + 1
}
for x < 2 {
if x < 1e-09 {
goto small
}
z = z / x
x = x + 1
}
if x == 2 {
return z
}
x = x - 2
p = (((((x*_gamP[0]+_gamP[1])*x+_gamP[2])*x+_gamP[3])*x+_gamP[4])*x+_gamP[5])*x + _gamP[6]
q = ((((((x*_gamQ[0]+_gamQ[1])*x+_gamQ[2])*x+_gamQ[3])*x+_gamQ[4])*x+_gamQ[5])*x+_gamQ[6])*x + _gamQ[7]
return z * p / q
small:
if x == 0 {
return Inf(1)
}
return z / ((1 + Euler*x) * x)
}
goto
ในกรณีนี้เราประหยัดจากการแนะนำอื่น (บูล) ตัวแปรที่ใช้เพียงเพื่อการควบคุมการไหลของการตรวจสอบในตอนท้าย ในกรณีนี้ที่goto
คำสั่งทำให้โค้ดจริงดีกว่าที่จะอ่านและปฏิบัติตามได้ง่ายขึ้น (ค่อนข้างขัดกับข้อโต้แย้งกับgoto
คุณกล่าวถึง)
นอกจากนี้โปรดทราบว่าgoto
ข้อความดังกล่าวมีลักษณะการใช้งานที่เฉพาะเจาะจงมาก ข้อกำหนดภาษาโกโตะกล่าวว่ามันอาจจะไม่กระโดดข้ามตัวแปรเข้ามาในขอบเขต (การประกาศ) และมันอาจจะไม่ได้กระโดดลงไปในเรื่องอื่น ๆ (Code-) บล็อก