Maison >développement back-end >Golang >Comment fonctionne la réflexion de type pour les types implicites ?
Pour autant que je sache, go est typé statiquement et n'effectue généralement pas de conversion de type implicite. Par conséquent, les constantes sans déclaration de type explicite sont soumises à des exigences lors de la première utilisation.
Donc, dans l'extrait de code ci-dessous, je veux n
是 float64
,因为这就是 math.sin
所期望的。但是当打印出反射类型时,我看到了 int
.
package main import ( "fmt" "math" "reflect" ) func main() { const n = 5000 // No explict type // fmt.Println(reflect.TypeOf(n)) // this would print "int" fmt.Println(math.Sin(n)) // math.Sin expects a float64 fmt.Println(reflect.TypeOf(n)) // print "int" }
Que se passe-t-il ici ? n
实际上有隐式 int 类型吗?或者反射不会显示这样的实际类型情况?我不认为 math.sin
transtype son argument car si je spécifie un type explicite, le compilateur renvoie une erreur.
[Type de constante non typée] est basé sur les exigences lors de la première utilisation.
C’est là que vous vous êtes trompé. Un type est sélectionné indépendamment pour chaque utilisation.
math.Sin nécessite un argument float64, le compilateur doit donc choisir float64 ici.
reflect.TypeOf prend un argument interface{}, le compilateur est donc libre de choisir n'importe quel type numérique (puisqu'ils implémentent tous l'interface vide). Le type entier par défaut est sélectionné ici : int.
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!