In Go sind die Typen „time.Time“ und „time.Duration“ bei der Arbeit mit zeitbezogenen Operationen weit verbreitet. Beim Umgang mit Ganzzahlmultiplikationen und diesen Typen kann es jedoch zu Verwirrung kommen.
Der folgende Code veranschaulicht diese Verwirrung:
//works time.Sleep(1000 * time.Millisecond) //fails var i = 1000 time.Sleep(i * time.Millisecond)
Der zweite Codeblock kann aufgrund einer Typinkongruenz nicht kompiliert werden . Obwohl beide 1000er im Code ganze Zahlen zu sein scheinen, ist dies nicht der Fall.
In Go erfordern Operatoren Operanden desselben Typs, mit Ausnahme von Operatoren, die Verschiebungen oder untypisierte Konstanten beinhalten. Für unseren Fall haben wir eine Multiplikation, was bedeutet, dass die Operanden identisch sein müssen.
In der ersten Zeile ist 1000 eine untypisierte Konstante. Bei Verwendung in einer Operation wird es automatisch in den Typ des anderen Operanden konvertiert, in diesem Fall time.Duration. In der zweiten Zeile ist i jedoch eine deklarierte Variable vom Typ int, was zu einer Typinkongruenz führt.
Um dieses Problem zu beheben, müssen wir i in time.Duration konvertieren, bevor wir die Multiplikation durchführen. Hier ist ein Beispiel:
var i = 1000 time.Sleep(time.Duration(i) * time.Millisecond)
Durch die Konvertierung von i in time.Duration wird die Multiplikation und der anschließende time.Sleep-Aufruf nun erfolgreich sein.
Das obige ist der detaillierte Inhalt vonWarum kann Time.Sleep(i * time.Millisecond) in Go nicht kompiliert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!