Maison >développement back-end >Golang >Comment puis-je déterminer le type sous-jacent et effectuer des conversions de type avec « l'interface {} » de Go ?

Comment puis-je déterminer le type sous-jacent et effectuer des conversions de type avec « l'interface {} » de Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-02 22:07:15682parcourir

How Can I Determine the Underlying Type and Perform Type Conversions with Go's `interface{}`?

Explorer les mystères de l'interface{} : démasquer le type et la conversion

Dans le domaine de la programmation Go, l'interface{} règne comme un type de données polyvalent mais énigmatique. Pour naviguer dans ses subtilités, il est important d'approfondir ses capacités et de trouver des réponses aux énigmes courantes.

Dévoilement du "vrai" type d'interface{}

Pour déterminer le vraie nature d'une valeur d'interface{}, vous pouvez utiliser des assertions de type :

w := weirdFunc(5)
if tmp, ok := w.(int); ok {
    fmt.Println("w is of type int")
}

Cette instruction conditionnelle vérifie si la la valeur w peut être transtypée en un entier. Si la conversion réussit, cela signifie que w contient effectivement une valeur entière sous-jacente.

Obtention d'une représentation sous forme de chaîne de type

Go fournit un mécanisme élégant pour récupérer la chaîne représentation d'un type appelé Type.Name :

fmt.Printf("Type of w: %T", w)

Dans cet exemple, la sortie serait "int", révélant la représentation sous forme de chaîne du type int cette valeur d'interface {} w encapsule actuellement.

Conversion à l'aide de la représentation sous forme de chaîne d'un type

Malheureusement, Go n'offre aucun moyen direct d'utiliser la représentation sous forme de chaîne d'un type pour la valeur conversion. Cependant, vous pouvez tirer parti de la réflexion pour obtenir cette fonctionnalité :

wt := reflect.TypeOf(w)
switch wt.Name() {
case "int":
    newValue := reflect.New(wt).Elem().Interface()
    _ = newValue.(int) // type assertion to use newValue
}

Dans cet extrait, la réflexion est utilisée pour récupérer la définition du type et créer une nouvelle valeur de ce type. L'assertion de type est ensuite utilisée pour convertir la valeur de l'interface{} en son type sous-jacent.

En maîtrisant ces techniques, les développeurs peuvent exploiter efficacement la puissance de l'interface{} et libérer sa polyvalence dans un large éventail de programmation Go. scénarios.

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!

Déclaration:
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