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