linuxea:go流程控制之goto(17)


与brack和continue不同,goto只有在C和go中才有。

goto作为跳转,需要定义一个label标签。这个标签决定跳转到哪里。并且break也可以配合标签使用,见示例3

goto示例1

但输入内容为c/u/r/d,打印create,update,read,delete,如果输入都不是,就重新执行循环。也就是说只有输入c/u/r/d程序才会结束。

代码如下:

package main
import "fmt"
func main(){

START:
    fmt.Print("input:(c/u/r/d):")
    var in string
    fmt.Scan(&in)
    
    for {
    if in == "c"{
        fmt.Println("create")
        break
    }else if in == "u" {
        fmt.Println("update")
        break
    }else if in == "r" {
        fmt.Println("read")
        break
    }else if in == "d" {
        fmt.Println("delete")
        break
    }else if in != "c" &&  in != "u" && in != "r" && in != "d" {
        goto START
    }
    }
}

跳出在 这里使用不等于!=,如果输入的不等于就跳转到标签START。如果输入c/u/r/d任意一个即可。

运行:

[root@marksugar /opt/Golang]# go run goto.go 
input:(c/u/r/d):s
input:(c/u/r/d):.
input:(c/u/r/d):1
input:(c/u/r/d):2
input:(c/u/r/d):3
input:(c/u/r/d):a
input:(c/u/r/d):c
create

goto示例2

从1加到100的和,不用for循环

如果i小于100,就result就等于i,进行i++,跳转到START判断继续循环。直到大于100,就跳转到FOREND

代码如下:

package main
import "fmt"
func main(){
    
    result := 0
    i := 1

START:
    for i>100 {
        fmt.Println(i)
        goto FOREND
    }
    result += i
    i++
    goto START
FOREND:
        fmt.Println(result)
}

运行

[root@marksugar /opt/Golang]# go run goto2.go
101
5050

goto示例3

定义嵌套循环,分别i和j,i和j相乘,如果等于9就结束程序。使用break 和BREAKEND标签。代码如下:

package main
import "fmt"
func main(){
BREAKEND:
    for i :=0;i<5;i++{
        for j :=0; j<5;j++{
            if i*j == 9 {
                break BREAKEND
            }
            fmt.Println(i,j,i*j)
        }
    }
}

!!! note
break的标签需要在循环层级之上,不能写在下面

运行:

[root@marksugar /opt/Golang]# go run brack2.go 
0 0 0
0 1 0
0 2 0
0 3 0
0 4 0
1 0 0
1 1 1
1 2 2
1 3 3
1 4 4
2 0 0
2 1 2
2 2 4
2 3 6
2 4 8
3 0 0
3 1 3
3 2 6
0 分享

您可以选择一种方式赞助本站

支付宝扫码赞助

支付宝扫码赞助

日期: 2019-10-23分类: Golang

标签: Golang

发表评论