Maison  >  Article  >  développement back-end  >  Comment obtenir un reflet.Tapez Go sans instance ?

Comment obtenir un reflet.Tapez Go sans instance ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-30 08:49:02223parcourir

How to Get a reflect.Type in Go Without an 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!

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