J'ai un tableau d'interfaces comme ceci:Dump un tableau d'interfaces dans golang
type Test struct {
Name string
}
func main() {
result := []Test{
Test{Name: "ahmad"},
Test{Name: "reza"},
}
dump(result)
}
Comment puis-je vider ce tableau et de faire une chaîne comme ceci:
Nom
ahmad
reza
Je veux quelque chose comme this mais avec des tableaux.
Mise à jour
Je ne veux pas vider l'interface de test ...
Je veux vider toutes les interfaces.
package main
import (
"fmt"
"reflect"
)
type Test struct {
Name string
}
func main() {
result := []Test{
Test{Name: "ahmad"},
Test{Name: "reza"},
}
dump(result)
}
func dump(datasets interface{}) {
items := reflect.ValueOf(datasets)
if items.Kind() == reflect.Slice {
for i := 0; i < items.Len(); i++ {
item := items.Index(i)
if item.Kind() == reflect.Struct {
s := reflect.ValueOf(item)
t := reflect.TypeOf(item)
for j := 0; j < s.NumField(); j++ {
fmt.Println(t.Field(j).Name)
}
}
}
}
}
Quelque chose comme ceci. Mais le résultat est:
typ
ptr
flag
typ
ptr
flag
Comment puis-je changer sortie:
Name
Name
Vous avez un tableau d'objets 'Test', avez-vous vraiment besoin de traiter ces éléments comme une interface?Dans votre échantillon, ce n'est certainement pas nécessaire, mais c'est juste un exemple, donc une clarification serait utile. Si cela est vraiment représentatif de votre code, vous devriez 100% faire 'result [i] .Name' et ne pas toucher à la réflexion ou aux interfaces du tout. – evanmcdonnal
@evanmcdonnal L'objet Test est juste pour l'échantillon. Je ne sais pas quelle interface va passer à la fonction de vidage. – ahmdrz