Heim >Backend-Entwicklung >Golang >Warum funktioniert „time.Hour / 73.0' in Go, aber „time.Hour / d' schlägt fehl?

Warum funktioniert „time.Hour / 73.0' in Go, aber „time.Hour / d' schlägt fehl?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-04 18:01:16280Durchsuche

Why Does `time.Hour / 73.0` Work in Go, But `time.Hour / d` Fail?

Dauer in Float und zurück konvertieren

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.

Die Arbeitszeile: time.Hour / 73.0

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.

Die fehlerhafte Linie: time.Hour / d

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 es funktioniert:

Damit diese Zeile funktioniert, müssen Sie d in eine time.Duration umwandeln. Dafür gibt es mehrere Möglichkeiten:

  • Explizite Konvertierung: s := time.Hour / time.Duration(d)
  • Type Casting : s := time.Hour / time.Duration(d)
  • Dauer Zuweisung: d := time.Duration(73.0)

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 verstehen:

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!

Stellungnahme:
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