首頁 > 後端開發 > Golang > 為什麼 Go 的 time.Sleep() 會根據常數類型以不同方式處理小數持續時間?

為什麼 Go 的 time.Sleep() 會根據常數類型以不同方式處理小數持續時間?

Barbara Streisand
發布: 2024-12-30 06:05:09
原創
335 人瀏覽過

Why Does Go's `time.Sleep()` Handle Fractional Durations Differently Based on Constant Type?

Go 中睡眠時間的分數

問題:

問題:
// Success
s := time.Hour / 73.0
fmt.Println("sleeping: ", s)
time.Sleep(s)

// Failure
d := 73.0
s := time.Hour / d
fmt.Println("sleeping: ", s)
time.Sleep(s)

// Error: invalid operation: time.Hour / d (mismatched types time.Duration and float64)
登入後複製

為什麼以下Go 會出現為什麼以下Go 會出現以下情況代碼成功休眠一小部分持續時間,而第二個代碼失敗?

答案:
  • 差別在於每行除數的種類:
  • Success:

Success:

s := time.Hour / time.Duration(d)
登入後複製

Failure:

d 明確鍵入為 float64,無法除以 time.Duration。
  • 第二行工作,您必須將 d 轉換為時間。持續時間:
或使用一個以下替代方法之一:

d := 73.5
s := time.Duration(float64(time.Hour) / d)
登入後複製
d := time.Duration(73.0)

var d time.Duration = 73.0

    對於不能的值以time.Duration表示,如73.5,time.Hour必須轉換為float64:
  • 進一步注意事項:
  • 常數:像time.Hour 這樣的常數具有無法更改的類型,因此它們不能直接與不相容的設備一起使用types.
無類型常數:無類型常數採用它們所使用的上下文的類型。在第一行中,73.0 適應 time.Duration。 型別轉換: 像 time.Duration(d) 這樣的明確型別轉換對於確保不同型別之間的相容性是必要的型別。

以上是為什麼 Go 的 time.Sleep() 會根據常數類型以不同方式處理小數持續時間?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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