按持續時間的一小部分進行睡眠
在Go 中,可以使用time.Sleep 來實現持續時間的一小部分的睡眠。 () 函數,它以 time.Duration 作為參數。但是,當嘗試指定持續時間的一小部分時,根據程式碼結構,可能會遇到不同的行為。
考慮以下兩種情況:
// Case 1: Works s := time.Hour / 73.0 fmt.Println("sleeping: ", s) time.Sleep(s) // Case 2: Fails d := 73.0 s := time.Hour / d fmt.Println("sleeping: ", s) time.Sleep(s) // Error: time.Hour / d (mismatched types time.Duration and float64)
在情況 1 中,程式碼成功休眠了不到一個小時,而在情況 2 中,它因類型不匹配錯誤而失敗。要理解其中的原因,掌握 Go 中如何處理常數和類型至關重要。
理解常數表達式
在 Go 中,常數是強類型的,也可以是無類型的(使用預設型別)或明確鍵入。
在情況1 中,time.Hour 是type 的型別常數時間.持續時間.將time.Hour 除以73.0 時,Go 會自動將無型別常數73.0 轉換為time.Duration,得到表達式time.Hour / time.Duration(73.0).
推論型別與不符合型別
在情況 2 中,d 是無型常數,初始化為73.0。由於需要類型,Go 根據常數值推斷類型,導致 d 變成 float64。
隨後,當嘗試將 time.Hour 除以 d(現在是 float64 類型)時,Go 偵測到類型不匹配。 Go 中不允許對 time.Duration 和 float64 進行除法。
解決類型不符問題
要解決類型不匹配問題,可以將d 明確轉換為time.Duration在執行除法之前:
s := time.Hour / time.Duration(d)
或者,d 可以直接定義為時間。 Duration變數:
d := time.Duration(73.0) s = time.Hour / d
或者,在變數宣告中使用型別轉換:
var d time.Duration = 73.0 s = time.Hour / d
處理無法按時間表示的值。持續時間
如果除法結果無法用time.Duration 表示(例如,將一小時除以73.5),請轉換time.Hour 轉換為float64,執行除法,然後將結果轉換為time. Duration:
d := 73.5 s := time.Duration(float64(time.Hour) / d)
透過了解類型轉換規則並在必要時明確處理轉換,可以成功睡眠一小部分Go中的持續時間。
以上是如何在 Go 中正確睡眠一小部分時間?的詳細內容。更多資訊請關注PHP中文網其他相關文章!