Maison > Article > développement back-end > Comment obtenir un reflet.Tapez Go sans instance ?
Obtenir un type sans instance
Dans Go, il est possible d'obtenir un reflet.Type sans posséder une instance du type. La clé réside dans l'utilisation de la méthode Elem() pour remonter d'un pointeur vers le type vers le type de base.
<code class="go">t := reflect.TypeOf((*int)(nil)).Elem() fmt.Println(t) // Output: int</code>
Cette approche peut être appliquée à différents types, comme démontré ci-dessous :
<code class="go">httpRequestType := reflect.TypeOf((*http.Request)(nil)).Elem() osFileType := reflect.TypeOf((*os.File)(nil)).Elem()</code>
De plus, il est possible de créer des variables globales pour stocker ces types pour un référencement facile.
<code class="go">var intType = reflect.TypeOf((*int)(nil)) var httpRequestType = reflect.TypeOf((*http.Request)(nil)) var osFileType = reflect.TypeOf((*os.File)(nil))</code>
En utilisant ces variables globales, vous pouvez effectuer des comparaisons de types à l'aide d'une instruction switch :
<code class="go">func printType(t reflect.Type) { switch t { case intType: fmt.Println("Type: int") case httpRequestType: fmt.Println("Type: http.request") case osFileType: fmt.Println("Type: os.file") default: fmt.Println("Type: Other") } }</code>
<code class="go">printType(intType) // Output: Type: int</code>
Au lieu d'utiliser Reflect.Type, vous pouvez créer des définitions de type constante :
<code class="go">type TypeDesc int const ( TypeInt TypeDesc = iota TypeHttpRequest TypeOsFile ) func printType(t TypeDesc) { switch t { case TypeInt: fmt.Println("Type: int") case TypeHttpRequest: fmt.Println("Type: http.request") case TypeOsFile: fmt.Println("Type: os.file") default: fmt.Println("Type: Other") } }</code>
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!