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

為什麼 Go 中「time.Millisecond * int」編譯失敗,而「time.Millisecond * 1000」卻編譯成功?

Susan Sarandon
發布: 2024-11-11 14:40:03
原創
135 人瀏覽過

Why Does

理解Go 中的「time.Millisecond * int」不符

在提供的程式碼片段中,兩個表達式都涉及乘法運算子「*」並利用time.Millisecond 值。然而,這些表達式的編譯成功之間存在差異。為了理解這一點,讓我們深入研究一下 Go 中運算子所使用的基礎知識。

運算子類型檢查

Go 對運算子強制執行嚴格的型別檢查,要求運算元具有相同的型別。如果操作數類型不同,除非操作涉及移位或無類型常數,否則編譯器將引發錯誤。

無型別常數異常

在第一個程式碼區塊中,第一個運算元 1000 是一個無型別常數。當在僅涉及常數的操作中使用無類型常數時,它會隱式轉換為另一個操作數的類型。在本例中,time.Millisecond 的類型為 time.Duration,從而轉換成功。

變數和無型別常數不符

在第二個程式碼區塊中,第一個運算元 i 是變數int 型別。當操作涉及變數和無類型常數時,類型檢查規則不允許隱式轉換。因此,編譯器會標記錯誤:invalid operation: i * time.Millisecond (mismatched types int and time.Duration)

解決方案

要解決此問題,可以明確轉換i 變數使用time.Duration(i) 函數轉換為time.Duration,如以下程式碼所示:

此轉換確保操作數類型相同,滿足Go的類型檢查要求,程式碼可以成功編譯

以上是為什麼 Go 中「time.Millisecond * int」編譯失敗,而「time.Millisecond * 1000」卻編譯成功?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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