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.
1 2 3 4 5 6 7 8 | <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 :
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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | <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 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <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!