Maison > développement back-end > Golang > Comment récupérer « reflect.Kind.Interface » pour un type implémentant une interface basée sur un type primitif dans Go ?

Comment récupérer « reflect.Kind.Interface » pour un type implémentant une interface basée sur un type primitif dans Go ?

Barbara Streisand
Libérer: 2024-12-31 05:30:12
original
603 Les gens l'ont consulté

How to Retrieve `reflect.Kind.Interface` for a Type Implementing an Interface Based on a Primitive Type in Go?

Récupération de reflex.Kind pour un type basé sur un type primitif

Dans Go, déterminer le reflet.Kind d'un type peut être délicat lorsque le type implémente une interface basée sur un type primitif. Par exemple, considérons le scénario suivant :

type ID interface {
    myid()
}

type id string

func (id) myid() {}

func main() {
    id := ID(id("test"))

    fmt.Println(id)
    fmt.Println(reflect.TypeOf(id))

    // How to get the kind to return "reflect.Interface" from the var "id"?
    fmt.Println(reflect.TypeOf(id).Kind())
}
Copier après la connexion

Dans cet exemple, l'interface ID est implémentée par le type id, qui est basé sur le type de chaîne primitif. Alors que nous voulons que reflex.TypeOf(id).Kind() renvoie réflexion.Interface, il renvoie à la place réflexion.String.

Solution utilisant le pointeur vers l'interface

To pour résoudre ce problème, nous devons nous rappeler que reflet.TypeOf() attend une interface{}. Lorsque vous travaillez avec des valeurs non-interface, Go les enveloppe automatiquement implicitement dans une interface{}. Pour éviter cela, nous pouvons utiliser un pointeur vers l'interface.

t := reflect.TypeOf(&id).Elem()
fmt.Println(t.Kind())
Copier après la connexion

En utilisant reflex.TypeOf(&id).Elem(), nous récupérons le descripteur de type de l'interface ID, ce que nous sommes intéressé. La méthode Elem() nous donne le type d'élément du type pointeur, qui est le type d'interface.

L'exécution du code mis à jour va maintenant sortie :

test
main.ID
interface
Copier après la connexion

Cela montre comment obtenir correctement le reflet.Kind pour un type qui implémente une interface basée sur un type primitif.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal