1
我有這樣一個結構:使用反射的SetString
type ProductionInfo struct {
StructA []Entry
}
type Entry struct {
Field1 string
Field2 int
}
我想使用反射來改變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")
}
謝謝你的提示Icza。我知道在設置過程中出現了錯誤,因爲我試圖創建「虛擬」代碼,並且我在很短的時間內完成了它。順便說一句,我得到了我的恐怖分子的地方。謝謝 – Davide