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

Wie funktioniert die Typreflexion für implizite Typen?

王林
王林nach vorne
2024-02-06 09:30:08902Durchsuche

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"
}

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen