Heim >Backend-Entwicklung >Golang >Warum kann Time.Sleep(i * time.Millisecond) in Go nicht kompiliert werden?

Warum kann Time.Sleep(i * time.Millisecond) in Go nicht kompiliert werden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-11 15:50:03963Durchsuche

Why Does Time.Sleep(i * time.Millisecond) Fail to Compile in Go?

Fallstricke der Zeitdauerarithmetik in Go

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!

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