Comment trouver le type d'un objet dans Go? En Python, j'utilise juste typeof
pour récupérer le type d'objet. De même dans Go, existe-t-il un moyen de mettre en œuvre la même chose?
Voici le conteneur à partir duquel j'itère:
for e := dlist.Front(); e != nil; e = e.Next() {
lines := e.Value
fmt.Printf(reflect.TypeOf(lines))
}
Je ne suis pas en mesure d'obtenir le type des lignes d'objet dans ce cas qui est un tableau de chaînes.
go
go-reflect
Rahul
la source
la source
fmt.Printf("%T\n", var)
Réponses:
Le package de réflexion Go a des méthodes pour inspecter le type de variables.
L'extrait suivant imprimera le type de réflexion d'une chaîne, d'un entier et d'un flottant.
Production:
voir: http://play.golang.org/p/XQMcUVsOja pour le voir en action.
Plus de documentation ici: http://golang.org/pkg/reflect/#Type
la source
J'ai trouvé 3 façons de renvoyer le type d'une variable à l'exécution:
Utilisation de la mise en forme des chaînes
Utilisation du package Reflect
Utilisation d' assertions de type
Chaque méthode a un meilleur cas d'utilisation différent:
formatage de chaîne - encombrement court et faible (pas nécessaire pour importer le package de réflexion)
Forfait Reflect - lorsque vous avez besoin de plus de détails sur le type auquel nous avons accès à toutes les capacités de réflexion
assertions de type - permet de regrouper les types, par exemple reconnaître tous les types int32, int64, uint32, uint64 comme "int"
la source
t
, celat := v.(type)
devientv.(type)
et_ = t
n'est plus nécessaire.case 'T': p.fmt.fmtS(reflect.TypeOf(arg).String())
. package fmt utilisant la réflexion pour imprimer le typeUtilisez le reflet package:
Produit:
Terrain de jeux
Exemple utilisant
ValueOf(i interface{}).Kind()
:Produit:
Terrain de jeux
la source
if reflect.TypeOf(err) == string
?Pour obtenir une représentation sous forme de chaîne:
Depuis http://golang.org/pkg/fmt/
Les sorties:
la source
Je resterais loin du reflet. paquet. Utilisez plutôt% T
la source
Le meilleur moyen est d'utiliser le concept de réflexion dans Google.
reflect.TypeOf
donne le type avec le nom du packagereflect.TypeOf().Kind()
donne le type de soulignementla source
Pour être bref, veuillez utiliser
fmt.Printf("%T", var1)
ou ses autres variantes dans le package fmt.la source
Vous pouvez vérifier le type de n'importe quelle variable / instance au moment de l'exécution soit en utilisant la
TypeOf
fonction de packages "Reflect" ou en utilisantfmt.Printf()
:la source
Pour obtenir le type de champs dans struct
Production
Voir dans IDE https://play.golang.org/p/bwIpYnBQiE
la source
vous pouvez utiliser
reflect.TypeOf
.int
,string
): il retournera son nom (par exemple:int
,string
)<package name>.<struct name>
(par exemple:main.test
)la source
Si nous avons ces variables:
la source
Vous pouvez utiliser:
interface{}..(type)
comme dans cette aire de jeuxla source
Le paquet Reflect vient à la rescousse:
Regardez cette démo
la source
Vous pouvez simplement utiliser la méthode fmt.printf () du package fmt, plus d'informations: https://golang.org/pkg/fmt/
exemple: https://play.golang.org/p/aJG5MOxjBJD
la source