在其他文件中使用功能更改结构

时间:2018-12-16 16:29:30

标签: go struct

我是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"
}

2 个答案:

答案 0 :(得分:2)

之所以会这样,是因为接收方被定义为一个值(与指针相对)。如果您将Change更改为

func Change(user *person.User) {
    user.NameChange()
}

并使用

调用
Change(&user)

那你应该很好。

答案 1 :(得分:1)

函数参数按值传递,因此,当您输入Change函数时,将在用户变量中获得User struct的副本。然后您对副本而不是原始文件调用NameChange。 要更改原始结构,必须将结构作为指针传递。

文件1:

super(Bullets,self).__init__()

有关此here的更多信息。指针描述为here