Maison > développement back-end > Golang > le corps du texte

Obtenez Reflect. Type de type basé sur un type primitif

WBOY
Libérer: 2024-02-09 15:12:09
avant
570 Les gens l'ont consulté

Obtenez Reflect. Type de type basé sur un type primitif

En programmation PHP, obtenir un type de réflexion basé sur un type primitif est une compétence importante. Reflect.Kind est une propriété de la bibliothèque de classes de réflexion fournie par PHP, qui peut être utilisée pour déterminer le type de données d'une variable. En utilisant Reflect.Kind, nous pouvons facilement obtenir le type de la variable et effectuer les opérations et traitements correspondants. Pour les développeurs PHP, maîtriser cette compétence permettra de mieux comprendre et utiliser le mécanisme de réflexion, et d'améliorer la lisibilité et la flexibilité du code. Dans cet article, l'éditeur PHP Baicao présentera en détail comment obtenir Reflect.Kind basé sur des types primitifs, et partagera quelques exemples pratiques et techniques pour aider les lecteurs à mieux maîtriser ce point de connaissance.

Contenu de la question

Je souhaite utiliser Reflect.kind comme Reflect.interface pour un type qui implémente une interface, mais dont l'implémentation est basée sur un type primitif : type id string

Une autre réponse à cette question pourrait être de savoir comment obtenir le reflet.type de n'importe quel type qui renvoie reflet.interfaces lors de l'appel de kind().

Voici l’exemple complet du terrain de jeu en déplacement :

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

Solution

reflect.typeof() (和 reflect.valueof()) 需要一个 接口{}。基本上,无论您传递给 reflect.typeof() 的值是什么,如果它还不是接口值,它将隐式包装在 interface{} 中。如果传递的值已经是接口值,则其中存储的具体值将作为 interface{} Transmettez.

Pour éviter ce "repacking", qui est l'un des rares cas où un pointeur vers une interface a du sens, en fait vous ne pouvez pas l'éviter ici. Vous devez passer un pointeur vers la valeur de l'interface.

Donc si vous passez un pointeur vers une interface, le pointeur sera enveloppé dans interface{} 值中。您可以使用 type.elem() pour obtenir le descripteur de type du "point-to-type": c'est à dire le type d'élément du type pointeur, qui sera le descripteur de type du type d'interface que vous recherchez.

Exemple :

id := id(id("test"))

fmt.println(id)
t := reflect.typeof(&id).elem()
fmt.println(t)

fmt.println(t.kind())
Copier après la connexion

Quelles sorties (essayez-le sur le go Playground) :

test
main.ID
interface
Copier après la connexion

Afficher les questions connexes : Quelle est la différence entre reflect.valueof() et value.elem() in go ?

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!

Étiquettes associées:
source:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal