package main
import "fmt"
type Info struct {
Name string
Age int
}
func (item Info)Update (value int) {
item.Age=value
}
func main() {
j:=Info{Name:"jyd",Age:19}
j.Update(20)
fmt.Println(j)
}
运行结果
{jyd 19}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在您提供的Go语言代码中,Update
方法试图更新结构体Info
的Age
字段,但是在Go语言中,方法接收者是值传递。这意味着当您在Update
方法内修改item
时,实际上是在操作这个值的一个副本,而不是原始的Info
结构体实例。因此,对item.Age
的修改不会影响到调用该方法的原始结构体变量j
。
为了让Update
方法能够修改外部的Info
实例,您需要将方法接收者改为指针类型。下面是修改后的代码:
package main
import "fmt"
type Info struct {
Name string
Age int
}
// 修改Update方法接收者为*Info,即Info的指针类型
func (item *Info) Update(value int) {
item.Age = value
}
func main() {
j := Info{Name: "jyd", Age: 19}
// 在调用Update时,使用地址符号"&"传递j的地址
j.Update(20)
fmt.Println(j)
}
现在,当运行这段修改后的代码,输出将会是{jyd 20}
,因为Age
字段成功被更新了。