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

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

Susan Sarandon
リリース: 2024-12-05 07:53:13
オリジナル
291 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート