【问题标题】:Dynamically set a struct field to a slice value using reflect使用反射将结构字段动态设置为切片值
【发布时间】:2020-08-06 13:25:10
【问题描述】:

我有以下代码 sn-p,经过一些反射后,它将结构的字段设置为字符串值

                switch fType := v.(type) {
                case MyCompositeFlagString:
                    s, ok := userInput.(string)
                    if !ok {
                        log.Printf("Erroneous input type:%T and input value: %v\n", userInput, userInput)
                        return ErrUnexpectedInput
                    }
                    valueField := values.Elem().Field(i).FieldByName("MyFlagString").FieldByName("Value")
                    valueField.SetString(s)

我在reflect 包中没有看到任何SetSlice 方法。

valueField的类型为[]string时,如何执行上述操作?

【问题讨论】:

  • 使用Set 方法。

标签: go struct reflection


【解决方案1】:

Value.SetString() 是设置string 值的便捷方法。出于显而易见的原因,all 类型没有单独的方法,但是有一个“通用”Value.Set() 方法,您可以使用它。您只需从要设置的值中获取reflect.Value

var someSlice ...
valueField.Set(reflect.ValueOf(someSlice))

【讨论】:

    猜你喜欢
    • 2020-07-21
    • 2021-01-20
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多