php Editor Strawberry Dans le développement de la programmation, nous utilisons souvent des objets Gorm pour les opérations de base de données. Parfois, nous devons obtenir le nom de la colonne et la valeur correspondante à partir de l'objet Gorm. Alors, comment répondre à cette exigence ? Dans Gorm, nous pouvons obtenir les propriétés et les valeurs de l'objet par réflexion, et les combiner avec les étiquettes de Gorm pour obtenir les noms de colonnes. Ensuite, je présenterai en détail comment obtenir les noms et les valeurs des colonnes à partir des objets Gorm. Nous allons jeter un coup d'oeil!
Je souhaite écrire une fonction qui peut prendre n'importe quel objet chargé depuis la base de données (via gorm) et imprimer tous les noms et valeurs de colonnes. Évidemment, l'élément clé est la possibilité de transmettre n'importe lequel de mes modèles Gorm dans cette fonction. Je ne les montre pas ci-dessous car ils sont tous simples.
Ce que j'ai jusqu'à présent, c'est une fonction avec une interface et un code de test qui l'appelle :
func testfunc(s interface{}) { // type v := reflect.TypeOf(s) fmt.Println(v) // fields? for i := 0; i < v.NumField(); i++ { fmt.Println(i) } }
trans := make([]orm.Trans, 0) db.Where("state = ?", state.FINISHED).Limit(1).Find(&trans) testfunc(trans)
Lors de l'exécution, le type s'imprime puis panique :
[]orm.Trans panic: reflect: call of reflect.Value.NumField on slice Value
Je suis un débutant, donc vos idées sont les bienvenues. Il semble que mes choix possibles soient :
Merci.
Essayez cette méthode :
func testfunc(x interface{}){ v := reflect.ValueOf(x) s := reflect.TypeOf(x) names:=make([]interface{},v.NumField()) values := make([]interface{}, v.NumField()) for i := 0; i < v.NumField(); i++ { values[i] = v.Field(i).Interface() names[i] = s.Field(i).Name } fmt.Println("Names",names) fmt.Println("values",values) }
1- Vous passez une tranche de structure. (Si vous utilisez le découpage, évitez d'appeler la fonction ci-dessus en boucle.)
2- Je passe cette structure à la fonction ci-dessus
x := struct { Name string Id int }{"Zargham", 2}
3-Obtenir le résultat :-
Names [Name Id] values [Zargham 2]
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!