-
for
(1) 基本的 for 循环由三部分组成,它们用分号隔开
初始化语句:在第一次迭代前执行
条件表达式:在每次迭代前求值,一旦为false就终止循环
后置语句:在每次迭代的结尾执行
(2) 初始化语句通常为一句__短变量声明__(使用:=),该变量声明仅在for语句的作用域中可见
(3) 和 C、Java、JavaScript 之类的语言不同,Go 的 for 语句后面的三个构成部分外__没有小括号__(加上小括号会报错), 大括号 { } 则是必须的
package main import "fmt" func main() { sum := 0 for i := 0; i < 10; i++ { sum += i } fmt.Println(sum) }(4) for循环三个部分中的__初始化语句__和__后置语句__都是可选的
package main import "fmt" func main() { sum := 1 for ; sum < 1000; { sum += sum } fmt.Println(sum) }(5) go语言中没有while,只有for,(4)中的例子完全可以写的更简略,这样就代替了while
package main import "fmt" func main() { sum := 1 for sum < 1000 { sum += sum } fmt.Println(sum) }(6) 还可以完全省略,作为无限循环
package main func main() { for { } } -
if
(1) if和for一样,也是__无需小括号__,需要大括号
package main import ( "fmt" "math" ) func sqrt(x float64) string { if x < 0 { return sqrt(-x) + "i" } return fmt.Sprint(math.Sqrt(x)) } func main() { fmt.Println(sqrt(2), sqrt(-4)) }(2) if和for一样,条件表达式前面也可以加上简短语句,变量作用域仅为if块和对应的else块
package main import ( "fmt" "math" ) func pow(x, n, lim float64) float64 { if v := math.Pow(x, n); v < lim { return v } else { fmt.Printf("%g >= %g\n", v, lim) } // 这里开始就不能使用 v 了 return lim } func main() { fmt.Println( pow(3, 2, 10), pow(3, 3, 20), ) } -
switch
(1) 功能:是编写一连串 if - else 语句的简便方法,它运行第一个值等于条件表达式的 case 语句
(2) 和Java/C++的switch区别
1° 每个case后__自动加上__break,也就是说只会执行一个case
2° case中的值__不必为常量__,也__不必为整数__
3° switch条件表达式之前和for和if一样,也可以加上短语句
package main import ( "fmt" "runtime" ) func main() { fmt.Print("Go runs on ") switch os := runtime.GOOS; os { case "darwin": fmt.Println("OS X.") case "linux": fmt.Println("Linux.") default: fmt.Printf("%s.\n", os) } }(3) case中的值甚至可以是一个函数的返回值
switch i { case 0: case f(): }从上到下顺次执行,在 i==0 时 f 不会被调用
(4) 没有条件的switch,作用相当于更加清晰版的__一串if-else__
package main import ( "fmt" "time" ) func main() { t := time.Now() switch { case t.Hour() < 12: fmt.Println("Good morning!") case t.Hour() < 17: fmt.Println("Good afternoon.") default: fmt.Println("Good evening.") } } -
defer
(1) 作用:将函数推迟到外层函数返回之后执行;如果有多个defer,则按照__栈的方式__执行后进先出
package main import "fmt" func main() { fmt.Println("counting") for i := 0; i < 10; i++ { defer fmt.Println(i) } fmt.Println("done") }
2_Flow_control_statements_for_if,_else_switch_and_defer
最新推荐文章于 2025-05-31 23:46:47 发布
本文介绍了Go语言中for、if、switch和defer的用法。for循环由初始化、条件、后置语句组成,部分可选,可替代while;if和for无需小括号;switch是if - else简便写法,有别于Java/C++;defer可将函数推迟到外层函数返回后执行,多个defer按栈方式执行。
5490

被折叠的 条评论
为什么被折叠?



