J'ai un struct comme celui-ci:utilisant la réflexion SetString
type ProductionInfo struct {
StructA []Entry
}
type Entry struct {
Field1 string
Field2 int
}
Je voudrais changer la valeur de Field1
utilisant la réflexion, mais l'objet retourné reflètent toujours CanSet() = false
. Que puis-je faire? Voir l'exemple de terrain de jeu.
https://play.golang.org/p/eM_KHC3kQ5
Voici le code:
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")
}
Nous vous remercions de conseils Icza. Je sais qu'il y avait des erreurs lors de l'asssegnation car j'ai essayé de créer du code "fictif" par exemple et je l'ai fait en très peu de temps :). BTW je suis arrivé là où mes erorrs étaient. Je vous remercie – Davide