Verstehen der „time.Millisecond * int“-Nichtübereinstimmung in Go
In den bereitgestellten Codefragmenten beinhalten beide Ausdrücke den Multiplikationsoperator „*“ und nutzen Sie den time.Millisecond-Wert. Es besteht jedoch eine Diskrepanz zwischen dem Kompilierungserfolg dieser Ausdrücke. Um dies zu verstehen, befassen wir uns mit den Grundlagen der Operatorverwendung in Go.
Go erzwingt eine strikte Typprüfung für Operatoren und erfordert, dass die Operanden identische Typen haben. Wenn sich die Operanden im Typ unterscheiden, löst der Compiler einen Fehler aus, es sei denn, die Operation beinhaltet Verschiebungen oder untypisierte Konstanten.
Im ersten Codeblock ist der erste Operand 1000 ein untypisierte Konstante. Wenn eine nicht typisierte Konstante in einer Operation verwendet wird, die nur Konstanten umfasst, wird sie implizit in den Typ des anderen Operanden konvertiert. In diesem Fall ist time.Millisecond vom Typ time.Duration, was zu einer erfolgreichen Konvertierung führt.
Im zweiten Codeblock ist der erste Operand i eine Variable vom Typ int. Wenn eine Variable und eine nicht typisierte Konstante an einer Operation beteiligt sind, erlauben die Typprüfungsregeln keine implizite Konvertierung. Daher meldet der Compiler einen Fehler: ungültiger Vorgang: i * time.Millisecond (nicht übereinstimmende Typen int und time.Duration)
Um dieses Problem zu beheben, kann die i-Variable explizit konvertiert werden in time.Duration mithilfe der Funktion time.Duration(i), wie im folgenden Code gezeigt:
var i = 1000 time.Sleep(time.Duration(i) * time.Millisecond)
Diese Konvertierung stellt sicher, dass die Operanden vom gleichen Typ sind, erfüllt die Typprüfungsanforderungen von Go und ermöglicht die Code zum erfolgreichen Kompilieren.
Das obige ist der detaillierte Inhalt vonWarum kann „time.Millisecond * int' in Go nicht kompiliert werden, „time.Millisecond * 1000' ist jedoch erfolgreich?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!