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

Comment obtenir un type sans instance dans Go ?

Linda Hamilton
Libérer: 2024-10-31 06:19:02
original
834 Les gens l'ont consulté

How to Get a Type Without an Instance in Go?

TypeOf sans instance : Passer le résultat à une fonction

En Go, il est possible d'obtenir un "Type" sans avoir d'instance de ce type. Ceci peut être réalisé grâce à l'utilisation de Reflect.TypeOf(), mais les exemples impliquent généralement une instance.

Obtenir un type sans instance

Pour acquérir un "Type" sans par exemple, l'astuce consiste à commencer par un pointeur vers le type, auquel peut être attribué un zéro "typé". Par la suite, .Elem() peut être utilisé pour obtenir le descripteur Reflect.Type du type pointé, connu sous le nom de type de base.

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

t = reflect.TypeOf((*http.Request)(nil)).Elem()
fmt.Println(t)

t = reflect.TypeOf((*os.File)(nil)).Elem()
fmt.Println(t)</code>
Copier après la connexion

Exemple de sortie :

int
http.Request
os.File
Copier après la connexion

Transmission de types

Si vous devez transmettre des types et les utiliser dans des commutateurs, créez-les et stockez-les dans des variables globales pour référence :

<code class="go">var (
    intType         = reflect.TypeOf((*int)(nil))
    httpRequestType = reflect.TypeOf((*http.Request)(nil))
    osFileType      = reflect.TypeOf((*os.File)(nil))
    int64Type       = reflect.TypeOf((*uint64)(nil))
)

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")
    case int64Type:
        fmt.Println("Type: uint64")
    default:
        fmt.Println("Type: Other")
    }
}

func main() {
    printType(intType)
    printType(httpRequestType)
    printType(osFileType)
    printType(int64Type)
}</code>
Copier après la connexion

Approche simplifiée

Si vous utilisez les types uniquement à des fins de comparaison, envisagez d'utiliser des constantes au lieu de refléter.Type :

<code class="go">type TypeDesc int

const (
    typeInt TypeDesc = iota
    typeHttpRequest
    typeOsFile
    typeInt64
)

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")
    case typeInt64:
        fmt.Println("Type: uint64")
    default:
        fmt.Println("Type: Other")
    }
}

func main() {
    printType(typeInt)
    printType(typeHttpRequest)
    printType(typeOsFile)
    printType(typeInt64)
}</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