函数结果的分配

来自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


哈士奇WWW
浏览 96回答 1
1回答

呼唤远方

它不会编译,因为该赋值无效。规格: 作业:每个左侧操作数必须是可寻址的、映射索引表达式或(仅适用于 = 赋值)空白标识符。函数调用的返回值不可寻址。有关详细信息,请参阅如何从函数调用中获取返回值的指针和如何在 Go 中存储对操作结果的引用?想想看:你调用一个函数,它返回一个值(你不存储),如果你不存储结果,改变它有什么好处?它将被丢弃,因此分配也将是无用的。如果将结果存储在变量中(如第二个示例中所示),则可以更改其字段,因为变量是可寻址的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go