为了账号安全,请及时绑定邮箱和手机立即绑定

修改接口数组{} golang

修改接口数组{} golang

Go
MMMHUHU 2021-09-13 09:59:56
这种类型的断言,def-referenceing 已经让我发疯了。所以我有一个Key string / Value interface{}成对的嵌套结构。存储在Value是[]interface,我想修改每个值。下面是创建一个数组Bar并将其传递到ModifyAndPrint应该修改顶级结构的函数的示例。我遇到的问题是,它实际上并没有修改 z 的内容,而且我不能做 aq := z.([]interface{})[i].(Bar)或&其中的内容。有没有办法做到这一点?如果是这样,我错过了什么组合?package mainimport "fmt"type Bar struct {   Name string   Value int}func ModifyAndPrint(z interface{}){    fmt.Printf("z before: %v\n", z)    for i, _ := range(z.([]interface{})) {              q := z.([]interface{})[i]        b := (q).(Bar)        b.Value = 42        fmt.Printf("Changed to: %v\n", b)    }    fmt.Printf("z after: %v\n", z)}func main() {           bars := make([]interface{}, 2)    bars[0] = Bar{"a",1}    bars[1] = Bar{"b",2}    ModifyAndPrint(bars)    }https://play.golang.org/p/vh4QXS51tq
查看完整描述

1 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

程序正在修改接口中值的副本{}。{} 实现目标的一种方法是将修改后的值分配回切片:


for i, _ := range(z.([]interface{})) {      

    q := z.([]interface{})[i]

    b := (q).(Bar)

    b.Value = 42

    z.([]interface{})[i] = b

    fmt.Printf("Changed to: %v\n", b)

}


查看完整回答
反对 回复 2021-09-13
  • 1 回答
  • 0 关注
  • 149 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信