来自C#,这让我感到困惑。在 Go 中,如果我有type Employee struct { ID int Salary int}那我就可以做到var tom Employeetom.Salary = 100目前为止,一切都好。然后,如果我有一个函数func employeeByID(id int) Employee { // do something and return an employee}那么为什么这不能编译呢?employeeByID(10).Salary = 100此外,这似乎编译得很好:andrew := employeeByID(10)andrew.Salary = 100
1 回答
呼唤远方
TA贡献1856条经验 获得超11个赞
它不会编译,因为该赋值无效。
函数调用的返回值不可寻址。有关详细信息,请参阅如何从函数调用中获取返回值的指针和如何在 Go 中存储对操作结果的引用?
想想看:你调用一个函数,它返回一个值(你不存储),如果你不存储结果,改变它有什么好处?它将被丢弃,因此分配也将是无用的。
如果将结果存储在变量中(如第二个示例中所示),则可以更改其字段,因为变量是可寻址的。
- 1 回答
- 0 关注
- 94 浏览
添加回答
举报
0/150
提交
取消