亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于 golang 中未使用的變量

關于 golang 中未使用的變量

Go
鳳凰求蠱 2022-09-05 17:45:27
為什么如果我們在切片中追加數據而不使用它(程序中的變量mySlice),為什么不拋出錯誤消息“未使用的變量”golang。謝謝#example var mySlice []string mySlice = append(mySlice,"halo")和地圖相同的行為#examplevar my = map[string]int{}my["tes"]=1
查看完整描述

1 回答

?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

規范: 變量聲明:

實現限制:如果從未使用變量,編譯器可能會將聲明函數體內的變量定為非法。

如您所見,編譯器可能接受也可能不接受未使用的變量。當前的 Go 編譯器通過檢查變量是否被讀取來實現這一點。讀取變量意味著使用該變量。

“未使用的變量”(或者更確切地說是“聲明但未使用”)由編譯器給出,如果您不讀取變量。

例如:

var i int
i = 3

即使您在上面的示例中為賦值,由于未讀取該值,這也是編譯時錯誤。i

使用追加到切片涉及讀取切片(切片傳遞到 )。append()append()

將值分配給映射鍵涉及讀取映射值。

如果您不使用但“直接”為切片元素分配值,情況也是如此:append()

var i = []int{0}
i[0] = 1

這是可以的,因為分配到涉及讀取切片標頭以確定我們要分配到的元素(地址)。i[0]

但是,如果我們像這樣分配給它自己:i

var i = []int{0}
i = []int{1}

此賦值不涉及讀取,因此它也是編譯時錯誤。i

例如,如果我們要使用結構:

type Point struct{ x, y int }var p Point
p.x = 1

這仍然編譯,即使賦值并不真正涉及讀取結構。我們可以將其視為“識別”涉及訪問變量的字段。pp.xp

這是一點點“灰色地帶”,是基于Go作者的意見,但這就是他們決定和實現它的方式。


查看完整回答
反對 回復 2022-09-05
  • 1 回答
  • 0 關注
  • 269 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號