假设有一个结构体Hero
package main
type Hero struct {
Name string
Ad int
Level int
}
想要修改该结构体对象的属性,有两种方式:
一种是定义一个结构体指针的方法
// 这里如果是func (h Hero) SetName(name string),则无法成功修改hero的Name
func (h *Hero) SetName(name string) {
h.Name = name
}
hero := Hero{
Name: "zhang3",
Ad: 100,
Level: 1,
}
hero.SetName("li4")
需要注意的是,SetName方法需要定义为结构体指针的方法,也就是*Hero的方法,不能是Hero的方法,如果定义为Hero的方法,那么每次调用SetName时,方法作用域内的h将会是对象hero的一个副本,而不是我们真正要修改的那个对象,如果定义为*Hero的方法,每次调用时,修改的就是我们调用的那个hero了
另一种是定义一个方法,将对象作为参数传入
func SetName2(h *Hero, name string) {
h.Name = name
}
hero := Hero{
Name: "zhang3",
Ad: 100,
Level: 1,
}
SetName2(&hero, "wang5")
同样,这里SetName2定义的参数为Hero对象的指针,调用SetName2时要将对象hero取址后传入,这样才能正确修改hero对象,如果不传入指针,那么修改的就是hero的副本,而hero本身不会有任何改变。
Comments | NOTHING