如何设置界面字段?

时间:2019-07-17 06:37:45

标签: go reflection reflect

我有一个切片[]interface{},其中有结构值。

当我尝试反映切片的元素以更新结构的字段时。我收到以下错误

  

恐慌:使用不可寻址的值反映:reflect.Value.SetInt

在此处最小化代码:

https://play.golang.org/p/VOycEtG2Nq5

package main

import (
    "fmt"
    "reflect"
)

type A struct {
    B int
}

func main() {
    array := []interface{}{A{1}}
    v := reflect.ValueOf(&array)
    va := v.Elem().Index(0)
    fmt.Println(va.Kind() == reflect.Interface) // true
    fmt.Println(va.CanAddr()) // true
    f := va.Elem().Field(0)
    f.SetInt(2)
    fmt.Println(array)
}

0 个答案:

没有答案