為什么如果我們在切片中追加數據而不使用它(程序中的變量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
這仍然編譯,即使賦值并不真正涉及讀取結構。我們可以將其視為“識別”涉及訪問變量的字段。p
p.x
p
這是一點點“灰色地帶”,是基于Go作者的意見,但這就是他們決定和實現它的方式。
- 1 回答
- 0 關注
- 269 瀏覽
添加回答
舉報
0/150
提交
取消