ホームページ > バックエンド開発 > 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 の睡眠時間の割合

質問:

なぜ次の Go は実行されるのかコードは小数点以下の期間だけ正常にスリープしますが、2 番目のコードは正常にスリープします。失敗しますか?

// 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)
ログイン後にコピー

答え:

違いは、各行の除数の型にあります:

  • 成功: 73.0 は型なしの数値定数であり、式 time.Hour / 73.0.
  • の time.Duration の失敗: d は明示的に float64 として型指定されており、time.Duration.
2行目を機能させるには、dを次のように変換する必要があります。 time.Duration:

s := time.Hour / time.Duration(d)
ログイン後にコピー
または次のいずれかの代替方法を使用します:

    d := time.Duration(73.0)
  • var d time。期間 = 73.0
で表現できない値の場合time.Duration (73.5 など)、time.Hour は float64 に変換する必要があります:

d := 73.5
s := time.Duration(float64(time.Hour) / d)
ログイン後にコピー

さらなる考慮事項:

  • 定数: time.Hour のような定数は変更できない型なので、変更できません互換性のない型で直接使用することはできません。
  • 型なし定数: 型なし定数は、使用されているコンテキストの型を受け取ります。最初の行では、73.0 が time.Duration に適応します。
  • 型変換: time.Duration(d) のような明示的な型変換異なるタイプ間の互換性を確保するために必要です。

以上がGo の `time.Sleep()` が定数型に基づいて小数部分の期間を異なる方法で処理するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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