go语言学习-流程控制语句

193 阅读1分钟

for

  • Go 只有一种循环结构:for循环
sum := 0
for i := 0; i < 10; i++ {
		sum += i
	}
	fmt.Println(sum)
  • 初始化语句和后置语句可以省略
sum := 0
for ; sum < 10; {
    sum += 1
}

fmt.Println(sum)

  • for 是 Go 中的 “while”(去掉分号)
sum := 0
for sum < 10 {
    sum += 1
}

fmt.Println(sum)
  • 无限循环
for {
    fmt.Println("1")
}

if

  • 语法:if后接判断条件,不需要(),后续跟{}
x := 10

for x > 0 {
    if x % 2 == 0 {
        fmt.Println(x)
    }else{
        fmt.Println(x)
    }
    x -= 1
}

// 可以在条件表达式前声明变量,变量作用域为if之内

if x:=2; x>0 {
    fmt.Println(x)
    x -= 1
}

switch

  • Go 只运行选定的 case,而非之后所有的 case
  • Go 的另一点重要的不同在于 switch 的 case 无需为常量,且取值不必为整数。
name := "jack"

switch name {
    case "tony":
        fmt.Println("tony")
    case "mike":
        fmt.Println("mike")
    default:
        fmt.Println(name)
}

** 如果上述没有default,匹配不到case时,不会执行所有case;如果加上default,如果匹配不到case时,执行default

  • 没有条件的 switch 同 switch true 一样。

defer

  • defer 语句会将函数推迟到外层函数返回之后执行。
func main() {
	defer fmt.Println("world")

	fmt.Println("hello")
}
执行结果是:
hello
world
  • 推迟的函数调用会被压入一个栈中。当外层函数返回时,被推迟的函数会按照后进先出的顺序调用。
for i := 0; i < 3; i++ {
		defer fmt.Println(i)
	}

	fmt.Println("done")
	
执行结果:
done
2
1