新手小白请教个问题,嵌套结构体修改interface{}类型的值

fantasyjie · · 1096 次点击 · 开始浏览    置顶

新手请教个问题,我这里有一个嵌套结构体,结构体中包含一个切片,切片中元素也是一个结构体,结构体中有一个字段的类型为**interface{}**。初始时给这个interface{}的类型赋了string值。后面通过一个一个指针接收的方法去循环修改这个切片中结构体的Uuid字段为int类型值。但是完成后,打印出来发现未被修改。想请教一下代码改怎么修改才能达到目的。 ``` package main import ( "fmt" ) type Ver struct { Num int Uuid interface{} } type Index struct { Line int Name []Ver } type Back struct { Floor string Name string Index Index } func (e *Back) change() { fmt.Println("------------------------------") fmt.Printf("before change struct is: %+v\n", e) for _, v := range e.Index.Name { fmt.Println("v.Uuid is:", v.Uuid) v.Uuid = 333 fmt.Println("after change v.Uuid is:", v.Uuid) } // e.Index.Name = 150 fmt.Printf("after change point: %p\n", e) fmt.Printf("after change struct is: %+v\n", e) } func main() { a := &Back{"abc","cvb",Index{10, []Ver{Ver{6, "gggg"},Ver{60,"gggg2"}}}} fmt.Printf("in main a point: %p\n", a) fmt.Printf("in main struct is: %#v\n", a) a.change() fmt.Println("------------------------------") fmt.Printf("last a struct is: %+v\n", a) } ``` 执行结果如下: ``` in main a point: 0xc00008e040 in main struct is: &main.Back{Floor:"abc", Name:"cvb", Index:main.Index{Line:10, Name:[]main.Ver{main.Ver{Num:6, Uuid:"gggg"}, main.Ver{Num:60, Uuid:"gggg2"}}}} ------------------------------ before change struct is: &{Floor:abc Name:cvb Index:{Line:10 Name:[{Num:6 Uuid:gggg} {Num:60 Uuid:gggg2}]}} v.Uuid is: gggg after change v.Uuid is: 333 v.Uuid is: gggg2 after change v.Uuid is: 333 after change point: 0xc00008e040 after change struct is: &{Floor:abc Name:cvb Index:{Line:10 Name:[{Num:6 Uuid:gggg} {Num:60 Uuid:gggg2}]}} ------------------------------ last a struct is: &{Floor:abc Name:cvb Index:{Line:10 Name:[{Num:6 Uuid:gggg} {Num:60 Uuid:gggg2}]}} ``` 麻烦!

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1096 次点击  ∙  1 赞  
加入收藏 微博
2 回复  |  直到 2022-08-11 18:27:06
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传