go的變數redeclare的問題,golang的一個小坑

來源:互聯網
上載者:User

標籤:io   ar   問題   div   代碼   amp   new   type   

go的變數聲明有幾種方式:

1 通過關鍵字 var 進行聲明

   例如:var i int   然後進行賦值操作 i = 5

2 最簡單的,通過符號 := 進行聲明和賦值

   例如: i:=5 golang會預設它的類型

下面看一段代碼,我們先聲明一個變數a,然後再重新聲明變數a,b,在這個函數中,變數a被聲明了2次,成為a的重聲明(redeclare),執行結果為23

package main

import (

  "fmt"

)

func main(){

    a:=1

    a,b:=2,3

    fmt.Println(a,b)

}

精彩的部分來了,請看第二段代碼

package main

import (

  "fmt"

)

type A struct{

 i int

}

func main(){

    testA:=&A{}

    testA.i=1

    testA.i,b:=2,3

    fmt.Println(testA.i,b)

}

我們定義了一個簡單的結構體A,A中的成員變數為i,我們在testA.i,b:=2,3對成員變數進行了新的聲明和賦值,執行會報錯。

原因:這個問題Google上是有過討論的

 Unlike regular variable declarations, a short variable declaration may redeclare variables provided they were originally declared earlier in the same block with the same type, and at least one of the non-blank variables is new. As a consequence, redeclaration can only appear in a multi-variable short declaration. Redeclaration does not introduce a new variable; it just assigns a new value to the original.
從go的spec看,redeclare是一個賦值,不是建立個新變數,為什麼對於成員變數不可以,只能暫時理解成設計問題吧  這裡是一個小坑,玩golang的請注意
相關文章

聯繫我們

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