Comment obtenir la valeur sous-jacente à partir d'une réflexion.Valeur dans golang?

Donc j'ai trouvé un code qui m'aider à obtenir commencé avec la réflexion dans l'Aller (golang), mais je vais avoir du mal à obtenir une de la valeur sous-jacente, de sorte que je peux créer un map[string]string à partir d'un struct et les champs.

Finalement, je tiens à rendre le résultat dans un map[string]interface{}, mais cette question est gentil de me bloque.

Le code que j'ai en ce moment:

package main

import (
    "fmt"
    "reflect"
)

type Foo struct {
    FirstName string `tag_name:"tag 1"`
    LastName  string `tag_name:"tag 2"`
    Age       int  `tag_name:"tag 3"`
}

func inspect(f interface{}) map[string]string {

    m := make(map[string]string)
    val := reflect.ValueOf(f).Elem()

    for i := 0; i < val.NumField(); i++ {
        valueField := val.Field(i)
        typeField := val.Type().Field(i)

        f := valueField.Interface()
        val := reflect.ValueOf(f)
        m[typeField.Name] = val.String()
    }

    return m
}

func dump(m map[string]string) {

    for k, v := range m {
        fmt.Printf("%s : %s\n", k, v)
    }
}

func main() {
    f := &Foo{
        FirstName: "Drew",
        LastName:  "Olson",
        Age:       30,
    }

    a := inspect(f)

    dump(a)
}

La sortie de l'exécution du code:

FirstName : Drew
LastName : Olson
Age : <int Value>

Ce que je comprends de la sortie pour FirstName et LastName sont réels réfléchir.Des objets de valeur, mais pour les chaînes de la Chaîne de caractères() la méthode de la valeur juste sorties de la sous-jacentes de la Chaîne. J'aimerais obtenir de l'int et la transformer en une chaîne de caractères, mais à partir de la relfect de la documentation du paquet, je ne suis pas tout de suite à voir comment c'est fait.

Soo.... Comment puis-je obtenir la valeur sous-jacente à partir d'une réflexion.Valeur dans golang?

  • Un printf de reflect.Value va (Aller 1.5) impression de sa valeur réelle. Voir ma réponse ci-dessous
  • cool, merci pour votre aide, réussi enfin à obtenir la valeur avec l'aide de la fmt, comme vous l'avez suggéré: goplay.espace/#w98PfGoZHl8
  • l'exécution de la solution avec le nom du champ, le type, la valeur et la balise: goplay.espace/#15XAsJBH5Sb
  • Bien fait. (Et je n'étais pas au courant de goplay.l'espace, par la voie: il semble à portée de main)
InformationsquelleAutor lucidquiet | 2013-08-06