標籤:
遞增遞減語句
在GO中,++與--是作為語句而並不是作為運算式
package mainimport "fmt"func main() { a:=1 //a=a++ //語句而非運算式,只能放左邊,go裡不支援 a++ fmt.Println(a) }
判斷語句if
條件運算式沒有括弧,塊需加花括弧 即使只有一行
支援一個(只支援1個)初始設定式(可以是並行方式)
左大括弧必須和條件陳述式或者else在同一行
支援單行模式
初始化語句中的變數為block層級,同時隱藏外部同名變數
package mainimport "fmt"func main() { a:=10 if a,b:=2,3; a<b { //左大擴號必須和if同行 if a:=2,b:=3; a<b寫法錯誤,只支援1個初始設定式 fmt.Println(a) // } fmt.Println(a) //只在if語句塊裡有值 10 fmt.Println(b) //undefined: b }
迴圈語句for
GO只有for一個迴圈語句關鍵字,但支援3種形式
初始化和步進運算式可以是多個值
條件陳述式每次迴圈都會被重新檢查,因此不建議在條件陳述式中使用函數,盡量提前計算好條件並以變數或常量代替
左大括弧必須和條件陳述式在同一行(格式化)
第一種形式
package mainimport "fmt"func main() { a:=0 for{ a++ if a>10{ break } fmt.Println(a) } }
第二種形式
func main() { a:=0 for a<10{ a++ fmt.Println(a) } }
第三種形式
func main() { for a:=0;a<10;a++{ fmt.Println(a) } }
注意
func main() { s:="abcd" for a:=0;a<len(s);a++{ //每次迴圈 都會執行len(s) 建議賦值給變數再放在for判斷運算式裡 fmt.Println(a) } }
分支選擇 switch語句
可以使用任何類型或運算式作為條件陳述式
不需要寫break,一旦條件符合自動終止
如希望繼續執行下一個case,需使用fallthrough語句
支援一個初始設定式(可以是並行式),右側需跟分號
左大括弧必須和條件陳述式在同一行
func main() { a:=1 switch a{ case 0: fmt.Println("a=0") case 1: fmt.Println("a=1") fmt.Println("ok") default: fmt.Println("default") } }
func main() { a:=1 switch { case a>=0: fmt.Println("a=0") case a>=1: fmt.Println("a=1") fmt.Println("ok") default: fmt.Println("default") } }//只輸出a=0 自動break
func main() { a:=1 switch { case a>=0: fmt.Println("a=0") fallthrough case a>=1: fmt.Println("a=1") fmt.Println("ok") fallthrough default: fmt.Println("default") } }/*輸出a=0a=1okdefault*/
func main() { switch a:=1; { case a>=0: fmt.Println("a=0") fallthrough case a>=1: fmt.Println("a=1") fmt.Println("ok") fallthrough default: fmt.Println("default") } fmt.Println(a);// undefined: a}//輸出結果同上
跳躍陳述式goto,break,continue
三個文法都可以配合標籤使用
標籤名區分大小寫,若不使用會造成編譯錯誤
break與continue配合標籤可用於多層迴圈的跳出
goto是調整執行位置
func main() { // LABEL1: for{ for i:=0;i<10;i++{ fmt.Println(i); if i>3{ // break LABEL1 goto LABEL2 } } } LABEL2:}
func main() { LABEL1: for i:=0;i<10;i++{ for { continue LABEL1 fmt.Println(i); } fmt.Println(i); } fmt.Println("ok!")}//只輸出ok!
func main() { LABEL1: for i:=0;i<10;i++{ for{ fmt.Println(i) continue LABEL1 } }}//輸出0-9//continue換成goto 會死迴圈輸出0
Go基本語句