2017-08-22 2 views
0
type M map[string]interface{} 
var item M 
fmt.Println(reflect.TypeOf(item)) 

renvoie main.M.trouver le type sous-jacent de type personnalisé dans golang

Comment trouver le type d'élément sous-jacent en tant que map[string]interface{}.

+0

Quel est le type de racine? Je n'ai jamais entendu un tel terme. – lofcek

+0

Copie associée/possible de [Identifier les types non-intégrés utilisant reflect] (https://stackoverflow.com/questions/36310538/identify-non-builtin-types-using-reflect/37292523#37292523). – icza

Répondre

2

Oui, vous pouvez chercher la structure précise du type, si c'est ce que vous entendez par « type racine »:

var item M 
t := reflect.TypeOf(item) 
fmt.Println(t.Kind()) // map 
fmt.Println(t.Key()) // string 
fmt.Println(t.Elem()) // interface {} 

test it

De là, vous êtes libre pour l'afficher comme vous vouloir.

1

Je ne pense pas qu'il y ait un moyen hors-the-box, mais vous pouvez construire le type sous-jacent à la main:

type M map[string]interface{} 
... 
var m M 
t := reflect.TypeOf(m) 
if t.Kind() == reflect.Map { 
    mapT := reflect.MapOf(t.Key(), t.Elem()) 
    fmt.Println(mapT) 
}