go语言的流程控制 | 青训营;

106 阅读2分钟

流程控制

Go语言的常用流程控制有 if 和 for,而 switch 和 goto 主要是为了简化代码、降低重复代码而生的结构,属于扩展类的流程控制。

if else(分支语句)

if 语句是用来判断条件是否成立,然后执行相应的分支。if 语句可以有 else 或者 else if 子句,也可以嵌套使用。例如:

  if x > 0 {
    fmt.Println("x is positive")
} else if x < 0 {
    fmt.Println("x is negative")
} else {
    fmt.Println("x is zero")
}

当表达式1的结果为true时,就会执行分支1,反之则会判断表达式2,如果都不满足,则会执行分支3的代码。

go语言的if条件判断省略掉了表达式两边的括号,使得代码十分简洁。但是go语言中有个规定,那就是{必须与if/else if 表达式/else在同一行,否则会编译失败。

for(循环语句)

for 语句是用来重复执行一段代码,直到满足某个条件。for 语句可以有三种形式:带有初始值、条件和步长的经典形式;只有条件的简化形式;没有任何条件的无限循环形式。例如:

// 经典形式
for i := 0; i < 10; i++ {
    fmt.Println(i)
}

// 简化形式
sum := 1
for sum < 1000 {
    sum += sum
}

// 无限循环形式
for {
    fmt.Println("Hello, world!")
}

switch case(条件判断)

switch 语句是用来根据一个表达式的值,选择不同的分支执行。switch 语句可以有多个 case 子句,每个 case 子句可以有多个值或者表达式。switch 语句还可以使用 fallthrough 关键字来实现穿透效果,即执行完当前 case 后继续执行下一个 case。例如:

switch n := rand.Intn(100); n {
case 0:
    fmt.Println("n is zero")
    fallthrough
case 1, 2, 3:
    fmt.Println("n is small")
default:
    fmt.Println("n is big")
}

goto 语句是用来跳转到指定的标签处执行。goto 语句可以实现任意位置的跳转,但是不能跳出函数或者跳入其他函数。goto 语句一般不推荐使用,因为它会破坏程序的结构,导致代码难以理解和维护。例如:

func main() {
    var a int = 10
LOOP:
    for a < 20 {
        if a == 15 {
            a = a + 1
            goto LOOP // 跳转到标签处
        }
        fmt.Printf("a 的值为 : %d\n", a)
        a++
    }
}

break和contiune

breakcontinue在go语言中的语法与其他语言几乎一致。break一般用于结束循环的使用,常用于一段代码中找到结果时直接进行break结束即可。continue一般用于结束当前循环使用,常用于当前结果不符合我们预期的结果时,我们可以使用continue来跳过当前循环,进行下一轮循环。

func break_continue() { 
for i:=0;;i++ { 
if i==3 {
fmt.Println(i) 
break 
} 
} 
//输出结果: //3
for i:=0;i<5;i++ {
if i%2==0 {
continue 
} 
fmt.Println(i) 
} 
//输出结果: //1 //3 
}