這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
main函數
Go中有且只有一個main函數,而且main函數必須在package main當中.main函數無傳回值也無參數,如果希望擷取從命令列傳遞的參數有其他包解決這個問題.
C++中main函數可以有參數也可以有傳回值.而且聲明的時候有傳回值,在main函數體中可以不寫,編譯器會幫你補上.
雖然Python中有類似main的東西,在代碼中我們也可以看見if __name__ == '__main__': 這樣的代碼,但實質上Python就不需要main函數.當一個Python檔案被當作可以直接
啟動並執行模組的時候,它的__name__屬性將是一個特殊的預設值 __main__,僅此而已.
結構控制
先來說if
Go中的if看起來是這樣子的:
if condition { <-{是強制的,並且只能在這一行
...
}
從其表顯示形式上看,不需要小括弧把條件包起來,而且包含了一對必須的大括弧.這樣子看起來感覺就是C++和Python的合體.
c++ code:
if(condition){
...
}
Python code:
if condition:
...
Go中的if語句可以設定一個局部變數,這個變數的作用於僅限於if句塊中.
if err := chmod(777); err != nil {
... //err的作用於就限定在這裡面
}
switch
go中的switch比較靈活可以接受一個運算式,運算式不必局限於整形或者常量.也就是說即便是寫出下面的語句也是可以的
a := "aaa"
switch {
case "aaa" == a:
fmt.Println("oooooo")
}
最終結果輸出:oooooo
go中的switch除了可以接受運算式之外還有一點和C++中switch有較大不同,那就是當匹配一個case之後就不會繼續向下匹配,這看起來就像是C++中switch在匹配了一個case 之後跟著一個break一樣.如果希望go中的switch在匹配一個case之後繼續向下匹配則需要顯示的加上fallthrough關鍵字.
switch i {
case 0:
case 1:
f()
// 空的 case 體
// 當 i == 0 時,f 不會被調用!
}
而這樣:
switch i {
case 0:
case 1:
f()
fallthrough
// 當 i == 0 時,f 會被調用!
}
C++中switch智能接受整形,這也使得如果你想使用字串,額這是沒有辦法實現的事.
Python中根本沒switch這貨
迴圈
go中迴圈只有for,不過for又有三種形式
1. for init; condition; post{
...
}
這種形式相當於C++裡面的for
2. for condition {
...
}
這種形式相當於c++中的while
3. for {
...
}
這種形式相當於C++中while(true)這樣的死迴圈
Python中的迴圈有for-in和while兩種結構.其中for-in是一種範圍迭代的迴圈,在C++11中亦有基於範圍的for了. while的話大家基本都一樣.
continue,break
go中的continue,break都可以加上一個標籤,實現不同的跳轉動作.下面例子中有一個雙層迴圈,外層迴圈5次,內層迴圈5次.
func main() {
Test:
for i := 0; i < 5; i++ {
for j := 0; j < 5; j++ {
fmt.Println(i, j)
if j == 2 {
continue Test
}
}
}
}
結果輸出:
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
2 2
3 0
3 1
3 2
4 0
4 1
4 2
修改代碼改為
func main() {
Test:
for i := 0; i < 5; i++ {
for j := 0; j < 5; j++ {
fmt.Println(i, j)
if j == 2 {
break Test
}
}
}
}
結果輸出:
0 0
0 1
0 2
也就是說在go中,continue和break可以使用標籤決定其略過某個迴圈的剩餘部分或者跳出某個迴圈(多層嵌套),這使得在使用上變得更為靈活了.
goto
好吧這部分又不關Python什麼事,雖然有人以庫的形式實現了Python中的goto,但這不在討論範圍內,有興趣的可以移步http://entrian.com/goto/
既然break和continue都可以加標籤,那麼go語言肯定是少不了goto語句的.我知道其實很多人對goto語句有著不理智的偏見.在go中goto語句和C++中的goto語句一致.
我們可以看到go中結構控制相較於C++和Python來說算是比較靈活比較簡單的.