Maison  >  Article  >  développement back-end  >  Comment obtenir un descripteur de type dans Go sans instance ?

Comment obtenir un descripteur de type dans Go sans instance ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-30 20:11:03122parcourir

How to Get a Type Descriptor in Go Without an Instance?

TypeOf sans instance

Lorsque vous travaillez avec Go, il est utile d'obtenir la représentation d'un type sans instance existante. Ceci peut être réalisé en utilisant des techniques de réflexion.

Utiliser TypeOf avec un Nil typé

Le point crucial consiste à commencer par un pointeur vers le type souhaité et à le convertir en zéro. Cela crée une valeur nulle typée, nous permettant d'accéder au type de base à l'aide de la méthode Elem().

<code class="go">t := reflect.TypeOf((*int)(nil)).Elem()
fmt.Println(t) // Output: int</code>

Exemple d'utilisation

Pour illustrer, considérons ce qui suit ParamReader struct :

<code class="go">type ParamReader struct {
    // The request from which to extract parameters
    context *http.Request
}

func (p *ParamReader) Require(s string, t reflect.Type) {
    // Validation logic omitted for brevity
}</code>

Dans la méthode Require(), nous pouvons utiliser reflect.TypeOf() avec des pointeurs nuls tapés pour vérifier les types de paramètres :

<code class="go">if( t == reflect.TypeOf((*uint64)(nil)) {
    // Validation logic for uint64
}</code>

Alternative avec Type personnalisé

Au lieu de transmettre des types bruts, il est pratique d'utiliser un type personnalisé qui encapsule des types spécifiques. Ceci peut être réalisé avec une structure simple de type énumération :

<code class="go">type TypeDesc int

const (
    TypeInt TypeDesc = iota
    TypeHttpRequest
    TypeOsFile
    TypeInt64
)</code>

Utilisation de constantes

Pour plus d'efficacité, il est recommandé d'utiliser des constantes prédéfinies plutôt que de créer des types de manière dynamique.

<code class="go">const (
    TypeInt int = iota
    TypeHttpRequest
    TypeOsFile
    TypeInt64
)</code>

Conclusion

En tirant parti des techniques de réflexion et de l'utilisation stratégique de valeurs nulles typées, il est possible d'obtenir des descripteurs de type sans instance. Cela ouvre diverses possibilités de vérification et de validation du type d'exécution, comme démontré dans l'exemple ParamReader.

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