來自C#,這讓我感到困惑。在 Go 中,如果我有type Employee struct { ID int Salary int}那我就可以做到var tom Employeetom.Salary = 100目前為止,一切都好。然后,如果我有一個(gè)函數(shù)func employeeByID(id int) Employee { // do something and return an employee}那么為什么這不能編譯呢?employeeByID(10).Salary = 100此外,這似乎編譯得很好:andrew := employeeByID(10)andrew.Salary = 100
1 回答

呼喚遠(yuǎn)方
TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊
它不會(huì)編譯,因?yàn)樵撡x值無效。
每個(gè)左側(cè)操作數(shù)必須是可尋址的、映射索引表達(dá)式或(僅適用于 = 賦值)空白標(biāo)識(shí)符。
函數(shù)調(diào)用的返回值不可尋址。有關(guān)詳細(xì)信息,請(qǐng)參閱如何從函數(shù)調(diào)用中獲取返回值的指針和如何在 Go 中存儲(chǔ)對(duì)操作結(jié)果的引用?
想想看:你調(diào)用一個(gè)函數(shù),它返回一個(gè)值(你不存儲(chǔ)),如果你不存儲(chǔ)結(jié)果,改變它有什么好處?它將被丟棄,因此分配也將是無用的。
如果將結(jié)果存儲(chǔ)在變量中(如第二個(gè)示例中所示),則可以更改其字段,因?yàn)樽兞渴强蓪ぶ返摹?/p>
- 1 回答
- 0 關(guān)注
- 109 瀏覽
添加回答
舉報(bào)
0/150
提交
取消