开发者社区 问答 正文

go程序中通过方法修改struct不生效

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}

展开
收起
水果黄瓜 2021-10-24 09:17:24 451 分享 版权
阿里云 AI 助理回答

在您提供的Go语言代码中,Update方法试图更新结构体InfoAge字段,但是在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字段成功被更新了。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答分类:
Go
问答地址: