【问题标题】:Golang: How to change struct field value in slice of interfacesGolang:如何更改接口切片中的结构字段值
【发布时间】:2016-10-11 14:21:57
【问题描述】:

游乐场问题:https://play.golang.org/p/UKB8f4qGsM

我有一些接口,我确定它们有哪些类型(实际上我不知道,所以我必须输入 switch 它,但为了清楚起见,我把它省略了)。如何为接口后面结构中的字段赋值?类型断言似乎带走了引用。

我也尝试过使用指针,但这也不起作用,主要是因为我不能键入断言(类型 *inter 不能被类型断言)并且当我取消引用它时,它有点让它变得毫无意义。 ..

我在 Go 方面没有那么丰富的经验,如果我能得到任何帮助,我将不胜感激。

【问题讨论】:

    标签: go struct interface slice


    【解决方案1】:

    你不能改变存储在接口中的值,你需要使用一个指向你想要改变的值的指针:

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

    【讨论】:

    • 为了清楚起见,我可以建议删除解决方案中的“不起作用”注释吗?我有点困惑为什么那行不通,直到我意识到评论来自他的例子:p
    • @william.taylor.09 删除了复制和粘贴的评论,谢谢 ;)
    猜你喜欢
    • 2020-02-03
    • 1970-01-01
    • 2020-12-31
    • 2018-04-21
    • 2022-10-23
    • 2012-10-11
    • 2020-07-08
    • 2014-03-25
    相关资源
    最近更新 更多