猿问

修改接口数组{} golang

这种类型的断言,def-referenceing 已经让我发疯了。所以我有一个Key string / Value interface{}成对的嵌套结构。存储在Value是[]interface,我想修改每个值。下面是创建一个数组Bar并将其传递到ModifyAndPrint应该修改顶级结构的函数的示例。我遇到的问题是,它实际上并没有修改 z 的内容,而且我不能做 aq := z.([]interface{})[i].(Bar)或&其中的内容。


有没有办法做到这一点?如果是这样,我错过了什么组合?


package main


import "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


MMMHUHU
浏览 150回答 1
1回答

侃侃尔雅

程序正在修改接口中值的副本{}。{} 实现目标的一种方法是将修改后的值分配回切片: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)}
随时随地看视频慕课网APP

相关分类

Go
我要回答