C++,Python,Golang對照學習-02

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
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來說算是比較靈活比較簡單的.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.