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

Comment obtenir un reflet.Tapez Go sans instance ?

Linda Hamilton
Libérer: 2024-10-30 08:49:02
original
330 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion
<code class="go">printType(intType) // Output: Type: int</code>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal