Heim >Backend-Entwicklung >Golang >Warum funktioniert „time.Hour / 73.0' in Go, aber „time.Hour / d' schlägt fehl?
In Go kann es zu unterschiedlichen Verhaltensweisen kommen, wenn Sie versuchen, Operationen an Zeitdauern, Floats und untypisierten Konstanten durchzuführen. Hier ist ein genauerer Blick auf zwei ähnliche Codezeilen und warum eine funktioniert, die andere jedoch nicht.
Der Ausdruck time.Hour / 73.0 ist eine kurze Variablendeklaration. Der Ausdruck auf der rechten Seite ist eine Division zwischen einer time.Duration (konstanter Wert für eine Stunde) und einer untypisierten numerischen Konstante (73,0).
Da time.Duration ein ganzzahliger Typ (int64) ist, ist der untypisierte Die Konstante wird in eine time.Duration umgewandelt (ohne Präzisionsverlust). Daher ergibt die Division einen time.Duration-Wert, der zum Schlafen für den angegebenen Bruchteil einer Stunde verwendet werden kann.
Im Gegensatz dazu , schlägt der Ausdruck time.Hour / d fehl, weil d nicht vom richtigen Typ ist.
In der ersten Zeile wird d aufgrund des aus dem abgeleiteten Typs als float64 deklariert untypisierte Konstante 73,0. Wenn Sie jedoch versuchen, time.Hour (eine time.Duration) durch d (ein float64) zu dividieren, löst Go einen Typkonfliktfehler aus, da Sie nicht direkt mit verschiedenen Typen arbeiten können.
Damit diese Zeile funktioniert, müssen Sie d in eine time.Duration umwandeln. Dafür gibt es mehrere Möglichkeiten:
Alternativ können Sie time.Hour in einen float64 umwandeln, die Division durchführen und das Ergebnis wieder in eine time.Duration umwandeln:
d := 73.5 s := time.Duration(float64(time.Hour) / d)
Untypisierte Konstanten können annehmen Abhängig vom Kontext, in dem sie verwendet werden, gibt es unterschiedliche Typen. In diesem Fall nimmt die untypisierte Konstante 73.0 den Typ float64 an, da sie in einem Ausdruck verwendet wird, in dem sie der float64-Variablen d zugewiesen wird. Im Ausdruck time.Hour / 73.0 wird die Konstante jedoch in eine time.Duration umgewandelt, da sie in einer Operation mit einem time.Duration-Wert verwendet wird.
Das obige ist der detaillierte Inhalt vonWarum funktioniert „time.Hour / 73.0' in Go, aber „time.Hour / d' schlägt fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!