ホームページ >バックエンド開発 >Golang >Go で時間の一部を正しく睡眠する方法?

Go で時間の一部を正しく睡眠する方法?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-06 04:28:13667ブラウズ

How to Correctly Sleep for Fractions of a Time Duration in Go?

時間の一部によるスリープ

Go では、時間の一部の睡眠を時間を使用して実現できます。 () 関数。引数として time.Duration を取ります。ただし、期間の一部を指定しようとすると、コード構造に基づいて異なる動作が発生する可能性があります。

次の 2 つのシナリオを考えてみましょう:

// 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 では、コードは正常に実行されました。スリープ時間は 1 時間未満ですが、ケース 2 では、型の不一致エラーで失敗します。その理由を理解するには、Go で定数と型がどのように処理されるかを理解することが重要です。

定数式を理解する

Go では、定数は厳密に型指定されており、型指定されていない場合もあります。 (デフォルトの型を使用)、または明示的に型指定されています。

ケース 1 では、time.Hour は型付き定数です。タイプ time.Duration の。 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 を a として直接定義することもできます。 time.Duration 変数:

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

または、変数宣言で型変換を使用します:

var d time.Duration = 73.0
s = time.Hour / d

time.Duration

で表現できない値の処理

除算結果が time.Duration で表現できない場合 (例: 時間を で割る) 73.5)、time.Hour を float64 に変換し、除算を実行して、結果を time.Duration:

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

に変換します。型変換ルールを理解し、必要に応じて変換を明示的に処理することで、正常に変換できます。 Go の時間のほんの一部だけスリープします。

以上がGo で時間の一部を正しく睡眠する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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