go流程控制

if用于判断, 一般有如下三种形式

1.if 条件 {...}

2.if 条件 {

} else {                            // else不能写在下一行

}

3.if 条件 {                       // 只会执行一个代码块(即各代码块互斥)

} else if  条件 {

} else if  条件 {

} else {

}

例: 从终端读入一个数, 再转换成整数, 如果不能转换, 则输出can not convert to int

func main() {
    var input string 
    fmt.Scanf("%s", &input) 	// 通常都使用%s(读入的是字符串)
    var inputNumber, err = strconv.Atoi(input)
    if err == nil {
        fmt.Printf("你输入的数字是: %d\n", inputNumber)
    } else {
        fmt.Printf("%s can not convert to int\n", input)
    }
}

switch开关, 用于多条件选择, 虽然可以使用if代替

不过使用switch更易读直观

func main() {
    var a = 70
    switch a {
    case 60: fmt.Println("a=60")	// 不用使用break, 自动阻断case穿透
    case 70: fmt.Println("a=70")
    case 80, 90, 100: fmt.Println("a=80或a=90或a=100")    // 多个条件下执行相同操作, 可以写在一起
    default: fmt.Println("default")
    }
}

输出结果为:a=70

go语言, 自动阻止case穿透, 即执行一个case自动就停止

fallthrough关键字可以实现穿透

如果fallthrough被执行到, 则下面一个case会被执行


func main() {
    var a = 60
    switch a {
    case 60: 
        fmt.Println("a=60") 
        fallthrough            // 此关键字需要单独写在一行
    case 70: 
        fmt.Println("a=70")
    case 80: 
        fmt.Println("a=80")
    default: 
        fmt.Println("default")
    }
}

输出结果为:

a=60

a=70

switch另一种形式:switch后面省略条件, 将条件写在case后面

这种写法更像if...else if...else if...else

switch {
case false : fmt.Println("优秀")
case false : fmt.Println("合格")
case true : fmt.Println("不及格")    // 会输出不及格
default : fmt.Println("非法的值")
}

例: 从终端输入一个数, 再随机生成一个0-100的数, 比较他们大小

func main() {
    for {
        var inputNum int
        fmt.Scanf("%d\n", &inputNum)	// 这个\n必须要加上, 因为输入数字后回车, 回车符就是\n, 要将它从缓冲区取走
        randomNum := random()
        fmt.Println("随机数是: ", randomNum)
        flag := false                   // 用于标识猜对了就退出
        switch {
            case inputNum == randomNum: 
                fmt.Println("猜对了")
                flag = true
            case inputNum > randomNum : 
                fmt.Println("输入小点的数")
            case inputNum < randomNum : 
                fmt.Println("输入大点的数")
        }
        if flag {
            return
        }
    }
}
func random() int {
	return rand.Intn(100)
}

for循环

形式一:

for循环由三部分组成

for i:=0; i<n; i++ {                   // 没有小括号, 加上小括号还不能通过编译for (i:=0; i<n; i++){...}

}

而if是可加小括号, 可不加, 都能通过编译

形式二:

for true {...}                           // 死循环(也可以省略true:  for {...})

形式三:

for range 用于遍历 数组, slice, map, chan

例如字符串 str := "hello world" (字符串就是字符数组), 如下遍历

for i, v := range str {        // i是下标, v是对应的值

}

在循环中可能会使用到continue与break来控制流程

continue 跳过本次循环进入下次循环

break结束循环(而return有两个作用: 返回值 和 结束函数执行)

goto

函数内部使用goto跳转到指定的位置

func main() {
    i := 0
    HE:            // HE就是一个标识
    println(i)
    i ++
    if i==5 {
        return
    }
    goto HE        // 跳转到标识
}

goto的可读性比较差, 一般不建议使用它

猜你喜欢

转载自blog.csdn.net/lljxk2008/article/details/86664903