Si j'ai un struct et que je veux obtenir sa clé, mais qu'il est actuellement du type interface{}
Comment je fais ça ?
Actuellement, j'obtiens l'erreur de compilation suivante :
invalid operation: d[label] (index of type interface {})
Jouez : http://play.golang.org/p/PLr91d55GX
package main
import "fmt"
import "reflect"
type Test struct {
s string
}
func main() {
test := Test{s: "blah"}
fmt.Println(getProp(test, "s"))
}
func getProp(d interface{}, label string) (interface{}, bool) {
switch reflect.TypeOf(d).Kind() {
case reflect.Struct:
_, ok := reflect.TypeOf(d).FieldByName(label)
if ok {
// errors here because interface{} doesn't have index of type
return d[label], true
} else {
return nil, false
}
}
}
Dois-je vraiment faire l'énoncé massif de cas pour chaque type différent et appeler l'analyse reflétée ? reflect.ValueOf(x).String()
etc ? J'espère qu'il existe un moyen plus élégant.