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