我是Go语言的超级初学者,她试图通过玩耍来教自己,所以如果我的言语不一致,我会道歉。我正在尝试使用两个文件。在文件1上,我想创建一个Person实例(30岁,名为Peter)。在此文件中,我希望能够调用Change,并将他的名字更改为Alex。
如果我仅调用user.NameChange,但不能更改(用户),则此方法有效。我该如何使它按预期工作?
非常感谢。
文件1:
package main
import (
"fmt"
"greetings/person"
)
func Change(user person.User) {
user.NameChange()
}
func main() {
user := person.User{"Peter", 30}
fmt.Println(user) // returns "Peter"
Change(user)
fmt.Println(user) // returns "Peter" - Expected "Alex"
}
文件2:
package person
type User struct {
Name string
Age int
}
func (u *User) NameChange() {
u.Name = "Alex"
}
答案 0 :(得分:2)
之所以会这样,是因为接收方被定义为一个值(与指针相对)。如果您将Change
更改为
func Change(user *person.User) {
user.NameChange()
}
并使用
调用Change(&user)
那你应该很好。
答案 1 :(得分:1)