這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
package mainimport ( "fmt")func main() { /* Go雖然保留了指標,但是其與其他程式設計語言不同的是,在Go中不支援 指標運算以及“->”運算子,而是直接採用“.”選擇符來操作指標目標 對象的成員 操作符“&”取變數地址,使用“*”通過指標間接訪問目標對象 預設值nil而非NULL */ a := 1 var p *int = &a fmt.Println(*p) //輸出1 //指標 /* ++和--是作為語句而非運算式 運算式可以放在=右邊 所以現在a++只能作為單獨的一行 */ a-- fmt.Println(*p) //輸出0 if 1 < 2 { //左大括弧必須放在if同一行 } //if的一種用法 if a := 1; a > 1 { //初始化語句;條件陳述式 } //if的另一種用法,注意這個a的範圍只有在if語句塊中 //並且覆蓋上面的a,當if執行完後,a變成了外部語句的a /* 迴圈語句for -Go中只有for一個迴圈語句關鍵字,但是支援三種形式初 -始化和步進運算式可以是多個值 -條件陳述式每次迴圈都會被重新檢查,因此不建議在條件語 句中使用函數,盡量提前計算好條件並以變數或常量代替 -左大括弧必須和條件陳述式在同一行 */ fmt.Println("-----") aa := 1 for { aa++ if aa > 3 { break } fmt.Println(aa) } fmt.Println("over") //第一種形式 fmt.Println("-----") for aa <= 3 { aa++ fmt.Println(aa) } //第二種形式 fmt.Println("-----") for i := 0; i < 3; i++ { fmt.Println("第三種") } //第三種形式(步進運算式) /* 選擇語句switch -可以使用任何類型或運算式作為條件陳述式 -不需要寫break -如果希望繼續執行下一個case,則需要使用fllthrough語句 -支援一個初始設定式(可以是並行方式),右側需跟分號 -左大括弧必須和條件陳述式在同一行 */ fmt.Println("-----") b := 1 switch b { case 0: fmt.Println("a=0") case 1: fmt.Println("a=1") default: fmt.Println("None") } fmt.Println("-----") switch bb := 1; { //這個bb的範圍也是代碼塊內 case bb >= 0: fmt.Println("bb>=0") case bb >= 1: fmt.Println("bb>=1") default: fmt.Println("None") } fmt.Println("-----") /* 跳躍陳述式goto,break,continue -三個文法都可以配合標籤使用 -標籤名區分大小寫,若建立了標籤不使用會出現編譯錯誤 -break與continue配合標籤可用於多層迴圈的跳出 -goto是調整執行位置,與其它2個語句配合標籤的結果並不相同 */LABEL1: for { for i := 0; i < 10; i++ { if i > 3 { break LABEL1 } } } fmt.Println("跳出迴圈!") //使用break LABEL1 會跳出與LABEL1同一層級的迴圈,注意,與LABEL1同一層級的迴圈 //顯然如果用goto,會調整執行位置,無限迴圈下去 //如果用continue,也會跳出LABEL1一層級的迴圈,在這裡為無限迴圈,必須做如下調整:LABEL2: for i := 0; i < 10; i++ { for { continue LABEL2 fmt.Println(i) //本條語句永遠不會執行 } } fmt.Println("跳出迴圈!") //如果把contain換成goto,肯定結果還是無限迴圈!}
運行結果:
1
0
—–
2
3
over
—–
—–
第三種
第三種
第三種
—–
a=1
—–
bb>=0
—–
跳出迴圈!
跳出迴圈!