Heim > Backend-Entwicklung > Golang > Wie funktioniert die Typreflexion für implizite Typen?

Wie funktioniert die Typreflexion für implizite Typen?

王林
Freigeben: 2024-02-06 09:30:08
nach vorne
937 Leute haben es durchsucht

Wie funktioniert die Typreflexion für implizite Typen?

Frageninhalt

Soweit ich weiß, ist go statisch typisiert und führt normalerweise keine implizite Typkonvertierung durch. Daher unterliegen Konstanten ohne explizite Typdeklaration bei der ersten Verwendung bestimmten Anforderungen.

Also, im Codeausschnitt unten möchte ich 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"
}
Nach dem Login kopieren

Was ist hier los? n 实际上有隐式 int 类型吗?或者反射不会显示这样的实际类型情况?我不认为 math.sin typisiert sein Argument, denn wenn ich einen expliziten Typ spezifiziere, gibt der Compiler einen Fehler aus.


Richtige Antwort


[Typ der untypisierten Konstante] basiert auf den Anforderungen bei der ersten Verwendung.

Hier hast du etwas falsch verstanden. Für jede Verwendung wird unabhängig ein Typ ausgewählt.

math.Sin erfordert ein float64-Argument, daher muss der Compiler hier float64 auswählen.

reflect.TypeOf nimmt ein Interface{}-Argument an, sodass der Compiler frei ist, einen beliebigen numerischen Typ zu wählen (da alle die leere Schnittstelle implementieren). Hier wird der Standard-Integer-Typ ausgewählt: int.

Das obige ist der detaillierte Inhalt vonWie funktioniert die Typreflexion für implizite Typen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage