首頁 > 後端開發 > Golang > 主體

為什麼 Time.Sleep(i * time.Millisecond) 在 Go 中編譯失敗?

Mary-Kate Olsen
發布: 2024-11-11 15:50:03
原創
932 人瀏覽過

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

Go 中時間持續時間算術的陷阱

在 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板