duanmianxue2687 2016-06-10 14:50
浏览 364
已采纳

Golang:如何更改接口切片中的结构字段值

Problem in Playground: https://play.golang.org/p/UKB8f4qGsM

I have a slice of interfaces, I know for sure which type they have (in reality i don't so I'd have to type switch it, but I left that out for clarity). How can I assign a value to a field in the struct behind the interface? The type assertion seems to take away the reference.

I also tried using pointers, that too doesn't work though, mostly because I can't type assert then (type *inter cannot be type asserted) and when I dereference it, it kinda makes it pointless to even have...

I'm not that experienced in Go, I would appreciate every help I can get.

  • 写回答

1条回答 默认 最新

  • douao8204 2016-06-10 14:53
    关注

    You can't change the value stored in the interface, you need to use a pointer to the value you want to change:

    for i := 0; i < 5; i++ {
        slice = append(slice, &b{a: a{name: "Tom"}})
    }
    
    for i, _ := range slice {
        x := slice[i].(*b)
        x.name = "Tim"
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 springboot+vue 集成keycloak sso到阿里云
  • ¥15 win7系统进入桌面过一秒后突然黑屏
  • ¥30 backtrader对于期货交易的现金和资产计算的问题
  • ¥15 求C# .net4.8小报表工具
  • ¥15 安装虚拟机时出现问题
  • ¥15 Selenium+docker Chrome不能运行
  • ¥15 mac电脑,安装charles后无法正常抓包
  • ¥18 visio打开文件一直显示文件未找到
  • ¥15 请教一下,openwrt如何让同一usb储存设备拔插后设备符号不变?
  • ¥50 使用quartz框架进行分布式任务定时调度,启动了两个实例,但是只有一个实例参与调度,另外一个实例没有参与调度,不知道是为什么?请各位帮助看一下原因!!