【前进】基本语法②(流程控制语句)
简而言之
我根据《A Tour of Go》的顺序总结了我个人在学习Go编程基础时所学到的内容。
No記事1【Go】基本文法①(基礎)2〜〜【Go】基本文法②(フロー制御文)「今ココ」〜〜3【Go】基本文法③(ポインタ・構造体)4【Go】基本文法④(配列・スライス)5【Go】基本文法⑤(Maps・ Range)6【Go】基本文法⑥(インターフェース)7【Go】基本文法⑦(並行処理)8【Go】基本文法総まとめ
对于(循环)
Go通过for循环结构来实现。
for循环由以下三个部分分割开来(分号分隔):
①初期化ステートメント:最初のイテレーション(繰り返し)の前に初期化が実行されます。
②条件式:各繰り返し毎に評価されます。
③後処理ステートメント: 各繰り返しの最後に実行されます
初始语句经常用于简短的变量声明,这些变量仅在for循环的范围内有效。不像JavaScript等语言,不需要使用(),但需要使用{}。
package main
import "fmt"
func main() {
sum := 0
for i := 0; i < 10; i++ {
sum += i
fmt.Println(sum) //=> 0 1 3 6 10
}
}
①初始语句和③后处理语句是完全可选的。
同时,分号也可以省略。
package main
import "fmt"
func main() {
sum := 1
for sum < 1000 {
sum += sum
}
fmt.Println(sum) //=> 1024
}
如果(条件分岐)
在Go语言中,像for循环一样,if语句也可以在条件之前写简单的语句。不过,if语句不需要使用括号进行条件判断,但需要使用大括号括起来表示if语句的范围。在if语句中声明的变量只在if的作用域内有效。
package main
import "fmt"
func condition(arg string)string{
if v := "GO"; arg == v {
return "This is Golang"
}else{
return "This is not Golang"
}
}
func main(){
fmt.Println(condition("Swift")) //=> This is not Golang
}
切换(条件分支)
在 Go 中,只有选择的 case 会被执行,其后的所有 case 都不会被执行。
package main
import "fmt"
func main(){
lang := "Go"
switch lang {
case "Ruby":
fmt.Println("This is Ruby")
case "Go":
fmt.Println("This is Go")
default:
fmt.Println("This is a programming language")
}
// => This is Go
}
如果在switch之前没有写任何条件,则可以将其写为switch true。
这样可以更简单地编写if~then~else语法。
package main
import "fmt"
func main(){
lang := "Go"
switch {
case lang == "Ruby":
fmt.Println("This is Ruby")
case lang == "Go":
fmt.Println("This is Go")
default:
fmt.Println("This is a programming language")
}
// => This is Go
}
推迟执行
将传给defer的函数的执行延迟到调用它的函数结束(即执行return)之前。
在下面的例子中,传给defer的函数(fmt.Println(“World”)被延迟到调用它的函数(func main())结束之前执行。
package main
import "fmt"
func main(){
defer fmt.Println("World")
fmt.Println("Hello")
//=> Hello
//=> World
}
当将多个函数传递给defer时
如果在defer中传递了多个函数,那么这些调用将会被堆栈保存。
当调用者的函数返回时,defer中传递的函数将按照新数据→旧数据的LIFO(后进先出)顺序执行。
也就是说,最初被defer的行将会最后执行。
package main
import "fmt"
func main(){
defer fmt.Println("Golang") //defer1
defer fmt.Println("Ruby") //defer2
fmt.Println("JS")
//=> JS
//=> Ruby
//=> Golang
}
在上面的例子中,在原始函数func main()中运行fmt.Print(“JS”)之后,接着运行了新的信息fmt.Print(“Ruby”),最后运行了最古老的信息fmt.Print(“Golang”)。
请看
我的围棋之旅②
一场围棋之旅