如何在Golang中修改结构体字段

51

我有一个例子play.golang.org/p/Y1KX-t5Sj9,在这个例子中,我在User结构体上定义了一个Modify()方法。

type User struct {
  Name string
  Age int
}
func (u *User) Modify() {
  *u = User{Name: "Paul"}
}

在main()函数中,我定义了一个结构体字面量 &User{Name: "Leto", Age: 11},然后调用了 u.Modify()。结果会打印出 'Paul 0' 我喜欢这个结构体的 Name 字段被更改了,但是保留 Age 字段的正确方法是什么?


18
我希望有人能解释一下为什么会有负评。这个问题看起来很完美:楼主提供了一个代码示例,解释了他们想要做什么,然后寻求帮助解决问题。 - mbroshi
8
我同意你的观点。这对于 Golang 的新手来说是一个不错的问题。 - Ryan Lyu
1个回答

63

只需修改您想更改的字段:

func (u *User) Modify() {
  u.Name = "Paul"
}

这在Go 之旅中介绍得很清楚,您肯定应该仔细阅读,不需要花费太长时间。


49
如果需要帮助他人,请注意:确保您的签名定义是一个指针:func (u *User) Modify(),而不仅仅是一个值:func (u User) Modify() - 这个问题曾经困扰了我。 - rhughes
@rhughes 谢谢您的回复,了解其背后的机制会非常好。如果它没有被定义为结构体,那么这是否意味着该操作将针对一个新的(空白,零)结构执行? - Kirill G.
1
@KirillG。这可能会回答你的问题:https://tour.golang.org/methods/4 - rhughes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接