函数结果赋值

来自 C#,这让我感到困惑。在 Go 中,如果我有

type Employee struct {
   ID     int
   Salary int
}

那我就可以了

var tom Employee
tom.Salary = 100

到目前为止,一切都很好。那么如果我有一个功能

func employeeByID(id int) Employee {
   // do something and return an employee
}

那为什么不编译呢?

employeeByID(10).Salary = 100

此外,这似乎编译得很好:

andrew := employeeByID(10)
andrew.Salary = 100

回答

它无法编译,因为该赋值无效。

规格: 作业:

每个左侧操作数必须是可寻址的、映射索引表达式或(仅用于 = 赋值)空白标识符。

函数调用的返回值是不可寻址的。详情请参见如何从函数调用中获取返回值的指针?以及如何在 Go 中存储对操作结果的引用?

想一想:你调用一个函数,它返回一个值(你不存储),如果你不存储结果,改变它有什么好处?它将被丢弃,因此分配也将毫无用处。

如果像第二个示例那样将结果存储在变量中,则可以更改其字段,因为变量是可寻址的。


以上是函数结果赋值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>