在 Go 中,time.Time 和 time.Duration 類型在處理與時間相關的操作時很常見。但是,在處理整數乘法和這些類型時可能會出現一些混亂。
以下程式碼舉例說明了這種混亂:
//works time.Sleep(1000 * time.Millisecond) //fails var i = 1000 time.Sleep(i * time.Millisecond)
第二個程式碼區塊由於類型不匹配而無法編譯。雖然程式碼中的兩個 1000 看起來都是整數,但事實並非如此。
在 Go 中,運算子需要相同類型的運算元,但涉及移位或無型別常數的運算子除外。對於我們的例子,我們有乘法,這意味著操作數必須相同。
在第一行中,1000 是一個無型常數。當在操作中使用時,它會自動轉換為另一個操作數的類型,在本例中為 time.Duration。然而,在第二行中,i 是 int 類型的聲明變量,這會導致類型不符。
要解決此問題,我們需要在執行乘法之前將 i 轉換為 time.Duration。這是一個範例:
var i = 1000 time.Sleep(time.Duration(i) * time.Millisecond)
透過將 i 轉換為 time.Duration,乘法和後續的 time.Sleep 呼叫現在將會成功。
以上是為什麼 Time.Sleep(i * time.Millisecond) 在 Go 中編譯失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!