Maison >développement back-end >Golang >Comment fonctionne la réflexion de type pour les types implicites ?

Comment fonctionne la réflexion de type pour les types implicites ?

王林
王林avant
2024-02-06 09:30:08933parcourir

Comment fonctionne la réflexion de type pour les types implicites ?

Contenu de la question

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 nfloat64,因为这就是 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.


Bonne réponse


[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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer