Learning Go - 2 flow control

1. 循环 - 仅for一种

for i := 0; i < 10; i++ {  // 强制无(), { 强制放后边,也可以省略前、后置语句
	sum += i
}
for sum < 1000 {  // 类似“while”,{强制后边
	sum += sum
}
for {  // 省略循环条件, 死循环
}

2. if 语句

if x < 0 {  // 强制无(), { 强制放后边
	return sqrt(-x) + "i"
}
if v := math.Pow(x, n); v < lim {  // 跟for一样,if可以在条件判断中执行 一个 简单的语句
	return v  // v的作用域仅在 if 范围内
}

3. 实例-牛顿法求平方

exercise-loops-and-functions

func Sqrt(x float64) float64 {
	z := float64(1)
	for {
		y := (z + x/z) / 2.0
		fmt.Println(y)
		if math.Abs(z - y) < 1e-10 {
			break
		}
		z = y
	}
	return z
}

4. switch 语句

switch os := runtime.GOOS; os {  // 也可以用没有条件的 switch(同switch true 一样)
	case "darwin":
		fmt.Println("OS X.")
		// fallthrough  ??
	case "linux":
		fmt.Println("Linux.")
	default:
		fmt.Printf("%s.", os)
}

5. defer 语句

// 延迟调用的参数会立刻生成,但是在上层函数返回前函数都不会被调用
fmt.Println("counting")
for i := 0; i < 10; i++ {
	defer fmt.Println(i)  // 延迟函数压入一个栈,函数返回时按照后进先出的顺序调用被延迟的函数
}
fmt.Println("done")
//Output: counting done 9 8 7 ... 0
Loading Disqus comments...
Table of Contents