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!