在 Go 语言中保留 goto
这点我确实没想到,毕竟很多人不建议使用 goto
语句。goto
后面接的是标签,表示下一步要执行哪里的代码。
goto label
...
label: code
下面是使用 goto
的例子:
package main
import "fmt"
func main() {
fmt.Println("A")
goto label
fmt.Println("B")
label:
fmt.Println("C")
}
在打印完字符 A
之后,执行了 goto
语句,跳转到 label
标签处,继续执行打印字符 C
的语句,所以运行该程序输出如下:
A
C
goto
语句通常与条件语句配合使用。可用来实现条件转移,构成循环,跳出循环体等功能。例如下面的程序输出数字 0
到 3
:
package main
import "fmt"
func main() {
num := 0
label:
if num < 4 {
fmt.Println(num)
num++
goto label
}
}
我们也可以使用 goto
实现类似 break
的效果:
package main
import "fmt"
func main() {
num := 0
for {
if num > 3 {
goto label
}
fmt.Println(num)
num++
}
label:
fmt.Println("finish")
}
运行该程序输出如下:
0
1
2
3
finish
当然,我们也可以使用 goto
实现类似 continue
的效果:
package main
import "fmt"
func main() {
num := 0
label:
for num < 11 {
if num % 2 == 1 {
num++
goto label
}
fmt.Println(num)
num++
}
}
运行该程序输出如下:
0
2
4
6
8
10
goto
语句与标签之间不能有变量声明,否则编译错误。编译下面的程序会报错:
package main
import "fmt"
func main() {
fmt.Println("A")
goto label
fmt.Println("B")
var x int = 0
label:
fmt.Println("C")
}
参考文献:
[1] Alan A. A. Donovan; Brian W. Kernighan, Go 程序设计语言, Translated by 李道兵, 高博, 庞向才, 金鑫鑫 and 林齐斌, 机械工业出版社, 2017.