Heim >Backend-Entwicklung >Golang >Warum behandelt „time.Sleep()' von Go gebrochene Dauern je nach Konstantentyp unterschiedlich?

Warum behandelt „time.Sleep()' von Go gebrochene Dauern je nach Konstantentyp unterschiedlich?

Barbara Streisand
Barbara StreisandOriginal
2024-12-30 06:05:09357Durchsuche

Why Does Go's `time.Sleep()` Handle Fractional Durations Differently Based on Constant Type?

Anteil der Schlafdauer in Go

Frage:

Warum funktioniert Folgendes? Code schläft erfolgreich für einen Bruchteil der Dauer, während der zweite schlägt fehl?

// Success
s := time.Hour / 73.0
fmt.Println("sleeping: ", s)
time.Sleep(s)

// Failure
d := 73.0
s := time.Hour / d
fmt.Println("sleeping: ", s)
time.Sleep(s)

// Error: invalid operation: time.Hour / d (mismatched types time.Duration and float64)

Antwort:

Der Unterschied liegt in der Art des Teilers in jeder Zeile:

  • Erfolg: 73.0 ist eine untypisierte numerische Konstante, die sich an die Zeit anpasst. Dauer im Ausdruck time.Hour / 73.0.
  • Fehler: d wird explizit als float64 eingegeben, das nicht durch time.Duration geteilt werden kann.

Um die zweite Zeile zu erstellen Arbeit, müssen Sie d in Zeit umrechnen. Dauer:

s := time.Hour / time.Duration(d)

oder verwenden Sie eine der folgenden Alternativen Wege:

  • d := time.Duration(73.0)
  • var d time.Duration = 73.0

Für Werte, die nicht zeitlich dargestellt werden können .Duration, z. B. 73,5, die Zeit.Stunde muss konvertiert werden float64:

d := 73.5
s := time.Duration(float64(time.Hour) / d)

Weitere Überlegungen:

  • Konstanten: Konstanten wie time.Hour haben einen Typ, der nicht geändert werden kann. Daher können sie nicht direkt mit nicht kompatiblen Typen verwendet werden.
  • Untypisiert Konstanten:Untypisierte Konstanten nehmen den Typ des Kontexts an, in dem sie verwendet werden. In der ersten Zeile passt sich 73.0 der Zeit an.Duration.
  • Typkonvertierung:Explizite Typkonvertierungen wie time.Duration(d) sind notwendig, um die Kompatibilität zwischen verschiedenen Typen sicherzustellen.

Das obige ist der detaillierte Inhalt vonWarum behandelt „time.Sleep()' von Go gebrochene Dauern je nach Konstantentyp unterschiedlich?. 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