2010-08-25 3 views
1

Si j'ai un nom de type (par exemple "container/vector"), existe-t-il un moyen de rechercher le reflect.Type qui a le nom donné? J'essaye d'écrire un simple système de file d'attente soutenu par la base de données et ceci serait très difficile sans cette fonctionnalité.Obtenir un reflect.Type d'un nom

Répondre

1

Je ne vois pas comment cela serait possible de manière triviale (ou pas du tout), puisque la résolution de noms fait partie du compilateur/éditeur de liens, pas de l'exécution. Cependant, http://github.com/nsf/gocode peut offrir quelques idées. Bien que je suis sûr que cela fonctionne en traitant les fichiers .a dans $ GOROOT, donc je ne vois toujours pas comment vous obtiendriez le reflect.Type. Peut-être que si le paquet exp/eval était plus mature?

Bien sûr, si vous connaissez tous les types possibles que vous rencontrerez, vous pouvez toujours faire une carte du reflect.Type. Mais je suppose que vous travaillez avec des commentaires imprévisibles, ou vous auriez pensé à cela.

0

La seule façon de créer un reflect.Type est d'avoir une valeur concrète du type voulu en premier. Vous ne pouvez même pas créer de types composites, tels qu'une tranche ([]T), à partir d'un type de base (T).

La seule façon de passer d'un string à un reflect.Type consiste à entrer vous-même le mappage.

mapping := map[string]reflect.Type { 
    "string": reflect.Typeof(""), 
    "container/vector": reflect.Typeof(new(vector.Vector)), 
    /* ... */ 
} 
Questions connexes