ホームページ >バックエンド開発 >Golang >Go で小数部分の時間を正確に睡眠するにはどうすればよいですか?

Go で小数部分の時間を正確に睡眠するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-05 07:53:13317ブラウズ

How Can I Precisely Sleep for Fractional Time Durations in Go?

分数の時間でスリープする

Go では、分数の時間でスリープすることができ、スリープの期間を正確に制御できます。ただし、分数を操作する場合は、特定の制限を考慮する必要があります。

型なし定数の操作

次のコードを考えてみましょう。

s := time.Hour/73.0
time.Sleep(s)

このコードは正常に実行され、必要な部分の期間スリープします。型なしの数値定数は、使用されるコンテキストに応じてさまざまな型を取ることができます。この場合、右側の式で 73.0 が必要になるため、73.0 は time.Duration になります。

型の不一致による失敗

ただし、次のコードはエラーで失敗します。型不一致エラー:

d := 73.0
s := time.Hour/d
time.Sleep(s)

この失敗の理由は、d が float64 であることです。デフォルトでは。 time.Hour を d で除算しようとすると、型が一致しません。

分数の明示的な変換

後者のコードを機能させるには、時間への明示的な変換を実行します。 .Duration は必須です:

d := 73.0
s := time.Hour / time.Duration(d)
time.Sleep(s)

あるいは、正しい値を使用して d を宣言することもできます。 type:

d := time.Duration(73.0)
s := time.Hour / d
time.Sleep(s)

非整数分数に関する考慮事項

より大きな分数の場合のように、期間の小数部を int64 として表現できない場合2^53 よりも、time.Hour を float64 に変換し、除算を実行してから、結果を変換して戻す必要があります。 time.Duration:

d := 73.5
s := time.Duration(float64(time.Hour) / d)
time.Sleep(s)

以上がGo で小数部分の時間を正確に睡眠するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。