Heim >Backend-Entwicklung >Golang >Warum kann „time.Millisecond * int' in Go nicht kompiliert werden, „time.Millisecond * 1000' ist jedoch erfolgreich?

Warum kann „time.Millisecond * int' in Go nicht kompiliert werden, „time.Millisecond * 1000' ist jedoch erfolgreich?

Susan Sarandon
Susan SarandonOriginal
2024-11-11 14:40:03184Durchsuche

Why Does

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.

Operatortypprüfung

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.

Untyped Constants Exception

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.

Variable und nicht typisierte Konstante stimmen nicht überein

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)

Lösung

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!

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