Heim >Backend-Entwicklung >Golang >Wie schlafe ich in Go für Bruchteile einer Zeitspanne richtig?
Schlafen in Bruchteilen einer Zeitdauer
In Go kann mit time.Sleep erreicht werden, dass man in Bruchteilen einer Zeitdauer schläft ()-Funktion, die als Argument eine time.Duration benötigt. Wenn Sie jedoch versuchen, einen Bruchteil einer Dauer anzugeben, kann es je nach Codestruktur zu unterschiedlichem Verhalten kommen.
Betrachten Sie diese beiden Szenarien:
// Case 1: Works s := time.Hour / 73.0 fmt.Println("sleeping: ", s) time.Sleep(s) // Case 2: Fails d := 73.0 s := time.Hour / d fmt.Println("sleeping: ", s) time.Sleep(s) // Error: time.Hour / d (mismatched types time.Duration and float64)
In Fall 1 ist der Code erfolgreich schläft für den Bruchteil einer Stunde, während es in Fall 2 mit einem Typkonfliktfehler fehlschlägt. Um zu verstehen, warum, ist es wichtig zu verstehen, wie Konstanten und Typen in Go gehandhabt werden.
Konstante Ausdrücke verstehen
In Go sind Konstanten stark typisiert und können entweder untypisiert sein (mit einem Standardtyp) oder explizit typisiert.
In Fall 1 ist time.Hour eine typisierte Konstante vom Typ Zeit.Dauer. Beim Teilen von time.Hour durch 73.0 konvertiert Go automatisch die untypisierte Konstante 73.0 in time.Duration, was den Ausdruck time.Hour / time.Duration(73.0) ergibt.
Typen und nicht übereinstimmende Typen ableiten
In Fall 2 ist d eine untypisierte Konstante, die mit initialisiert wird 73,0. Da ein Typ erforderlich ist, leitet Go den Typ basierend auf dem konstanten Wert ab, was dazu führt, dass d zu float64 wird.
Wenn anschließend versucht wird, time.Hour durch d zu dividieren, das jetzt vom Typ float64 ist, erkennt Go dies eine Typinkongruenz. Die Aufteilung von time.Duration und float64 ist in Go nicht zulässig.
Typkonflikt auflösen
Um den Typkonflikt aufzulösen, kann man d explizit in time.Duration konvertieren bevor Sie die Division durchführen:
s := time.Hour / time.Duration(d)
Alternativ kann d direkt als time.Duration definiert werden Variable:
d := time.Duration(73.0) s = time.Hour / d
Oder mithilfe einer Typkonvertierung in der Variablendeklaration:
var d time.Duration = 73.0 s = time.Hour / d
Verarbeitung von Werten, die nicht durch Zeit darstellbar sind. Dauer
Wenn das Divisionsergebnis nicht durch time.Duration dargestellt werden kann (z. B. Division einer Stunde durch 73,5), konvertieren Sie time.Hour in float64, führen Sie die Division durch und konvertieren Sie dann das Ergebnis in Zeit. Dauer:
d := 73.5 s := time.Duration(float64(time.Hour) / d)
Wenn Sie die Typkonvertierungsregeln verstehen und die Konvertierung bei Bedarf explizit durchführen, können Sie erfolgreich für Bruchteile einer Zeitdauer schlafen Los.
Das obige ist der detaillierte Inhalt vonWie schlafe ich in Go für Bruchteile einer Zeitspanne richtig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!