Ketika kami benar-benar memeriksa kode sumber pustaka standar Go, kami dapat melihat di mana goto
sebenarnya diterapkan dengan baik.
Sebagai contoh, dalam math/gamma.go
berkas, yang goto
pernyataan digunakan :
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)
}
Dalam goto
kasus ini, kita tidak perlu memasukkan variabel lain (boolean) yang digunakan hanya untuk aliran kontrol, diperiksa di bagian akhir. Dalam hal ini , goto
pernyataan tersebut membuat kode sebenarnya lebih baik untuk dibaca dan lebih mudah diikuti (sangat bertentangan dengan argumen yang menentang yang goto
Anda sebutkan).
Perhatikan juga, bahwa goto
pernyataan tersebut memiliki kasus penggunaan yang sangat spesifik. The spesifikasi bahasa di goto menyatakan bahwa hal itu mungkin tidak melompati variabel yang masuk ke lingkup (yang dinyatakan), dan mungkin tidak melompat ke blok lainnya (kode-).