小编Dav*_*ide的帖子

使用反射SetString

我有一个像这样的结构:

type ProductionInfo struct {
    StructA []Entry
}

type Entry struct {
    Field1 string
    Field2 int
}
Run Code Online (Sandbox Code Playgroud)

我想更改Field1使用反射的值,但反射对象始终返回CanSet() = false。我能做些什么?请参阅游乐场示例。

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

这是代码:

func SetField(source interface{}, fieldName string, fieldValue string) {
    v := reflect.ValueOf(source)
    tt := reflect.TypeOf(source)

    for k := 0; k < tt.NumField(); k++ {
        fieldValue := reflect.ValueOf(v.Field(k))

        fmt.Println(fieldValue.CanSet())
        if fieldValue.CanSet() {
            fieldValue.SetString(fieldValue.String())
        }
    }
}

func main() {
    source := ProductionInfo{}
    source.StructA = append(source.StructA, Entry{Field1: "A", Field2: 2})

    SetField(source, "Field1", "NEW_VALUE")
}
Run Code Online (Sandbox Code Playgroud)

string reflection struct go

4
推荐指数
1
解决办法
2896
查看次数

标签 统计

go ×1

reflection ×1

string ×1

struct ×1