gpt4 book ai didi

go - 修改 interface{} golang 数组

转载 作者:IT王子 更新时间:2023-10-29 01:36:43 29 4
gpt4 key购买 nike

这种类型断言,def-referencing 把我逼疯了。所以我有一个 Key string/Value interface{} 对的嵌套结构。存储在 Value 中的是一个 []interface,我想修改每个值。下面是创建 Bar 数组并将其传递给 ModifyAndPrint 函数的示例,该函数应该修改顶层结构。我遇到的问题是它实际上并没有修改 z 的内容,我不能做 q := 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

最佳答案

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

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

playground example

关于go - 修改 interface{} golang 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28054913/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com