Go 函数结果的赋值

Go 函数结果的赋值,go,Go,来自C#,这让我很困惑。 去吧,如果我有 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

来自C#,这让我很困惑。 去吧,如果我有

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

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

每个左侧操作数必须是映射索引表达式,或(仅适用于=赋值)的

函数调用的返回值不可寻址。有关详细信息,请参阅和

想想看:你调用一个函数,它返回一个值(你不存储),如果你不存储结果,改变它会有什么好处?它将被丢弃,因此任务也将是无用的


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

它不会编译,因为该赋值无效

每个左侧操作数必须是映射索引表达式,或(仅适用于=赋值)的

函数调用的返回值不可寻址。有关详细信息,请参阅和

想想看:你调用一个函数,它返回一个值(你不存储),如果你不存储结果,改变它会有什么好处?它将被丢弃,因此任务也将是无用的


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

您希望
employeeByID(10).Salary=100
做什么?如果函数返回的是
*Employee
,则有意义。出于同样的原因,您不能执行
5=10
。为什么要为本身未存储在任何位置的对象分配值?即使在C#中也不能这样做,您希望
employeeByID(10)。Salary=100
做什么?如果函数返回的是
*Employee
,则有意义。出于同样的原因,您不能执行
5=10
。为什么要给本身不存储在任何地方的东西赋值呢?即使在C语言中也不能这样做#