修改 interface{} golang 数组
Modify array of interface{} golang
这种类型断言,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)
}
程序正在修改接口{}中值的副本。实现目标的一种方法是将修改后的值分配回切片:
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)
}
这种类型断言,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)
}
程序正在修改接口{}中值的副本。实现目标的一种方法是将修改后的值分配回切片:
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)
}