[golang基礎] 局部變數初始化:=

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

一 基礎用法

操作 := 只能用於方法內部, 聲明並初始化新的變數

v := 3

但是不能用於已聲明變數賦值, 下面的做法編譯器會報錯誤"no new variables on left side of :="

var v int = 0v := 1

通過錯誤可以瞭解到, := 操作左邊必須要有新變數, 那麼多個變數初始化只需要滿足左邊至少有一個新變數即可

err := errors.New("error1")ret, err := test_fun()

這種做法是合法的, 因為ret是新變數, 這樣就很方便了, 因為go方法經常會返回錯誤err, 那麼在同一個方法內

只需要聲明一個err變數即可

 

二 :=陷阱

由於:=只能用於局部變數, 那麼下面的代碼會發生什麼情況呢?

var out int = 1func test() {    out, in := 2, 3      }

變數out的範圍包含test(), 但是實際上:= 操作會新建立新的局部變數out, 謹記!!!

 

那麼類似情況: 

func test1() {    v := 1    {        v := 1    }    }

編譯器會不會報"no new variables on left side of :="? 編譯器沒有報錯,所以兩個v是不同的變數

在go中 if for switch都可能產生特殊範圍的局部變數,在if for switch中有變數賦值時需要注意 :=

結論:

1 := 左邊出現了同層範圍的局部變數,只是賦值操作,沒有新產生局部變數

2 := 左邊出現了上層範圍的局部變數,新產生同名局部變數並賦值

3 := 左邊出現了非局部變數,產生與非局部變數同名的局部變數

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.