首頁 >後端開發 >Golang >為什麼 `time.Sleep(i * time.Millisecond)` 在 Go 中編譯失敗?

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

DDD
DDD原創
2024-11-18 21:21:02870瀏覽

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

time.Millisecond 混亂

在Go 中,當嘗試將time.Sleep() 函數與time.Duration 值一起使用時,它是確保相乘的值具有相同類型至關重要。下面的程式碼對此進行了說明:

// Compiles successfully
time.Sleep(1000 * time.Millisecond)

這裡,1000 是一個無型別常數,在執行乘法之前會自動轉換為 time.Duration。

但是,當使用int 變數改為:

var i = 1000
// Compilation error
time.Sleep(i * time.Millisecond)

程式碼無法使用錯誤:

invalid operation: i * time.Millisecond (mismatched types int and time.Duration)

這是因為變數i 是int 類型,而time. Millisecond 是time.Duration 類型。 Go 要求 * 等二元運算子的運算元必須是同一型,除非運算涉及移位或無型別常數。

要解決這個問題,可以將 int 變數轉換為 time.Duration 之前的乘法:

var i = 1000
time.Sleep(time.Duration(i) * time.Millisecond)

以上是為什麼 `time.Sleep(i * time.Millisecond)` 在 Go 中編譯失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn