ホームページ > バックエンド開発 > Golang > Go では「time.Hour / 73.0」は機能するのに、「time.Hour / d」は失敗するのはなぜですか?

Go では「time.Hour / 73.0」は機能するのに、「time.Hour / d」は失敗するのはなぜですか?

Patricia Arquette
リリース: 2024-12-04 18:01:16
オリジナル
277 人が閲覧しました

Why Does `time.Hour / 73.0` Work in Go, But `time.Hour / d` Fail?

期間を浮動小数点に変換して元に戻す

Go では、期間、浮動小数点、および型なし定数に対する操作を実行しようとすると、さまざまな動作が発生する可能性があります。ここでは、2 つの類似したコード行を詳しく見ていき、一方は機能するのにもう一方は機能しない理由を説明します。

作業行: time.Hour / 73.0

式 time.Hour / 73.0 は次のとおりです。短い変数宣言。右側の式は、time.Duration (1 時間の定数値) と型なし数値定数 (73.0) の間の除算です。

time.Duration は整数型 (int64) であるため、型なし定数は time.Duration に変換されます (精度を損なうことなく)。したがって、除算の結果は time.Duration 値になり、これを使用して、指定された時間の小数部分をスリープすることができます。

失敗した行: time.Hour / d

対照的に、式 time.Hour / d は、d が正しい型ではないため失敗します。

最初の行では、型により d は float64 として宣言されています。型なし定数 73.0 から推定されます。ただし、time.Hour (time.Duration) を d (float64) で除算しようとすると、異なる型を直接操作できないため、Go は型不一致エラーを発生させます。

作り方:

この行を機能させるには、d を time.Duration に変換する必要があります。これを行うにはいくつかの方法があります。

  • 明示的な変換: s := time.Hour / time.Duration(d)
  • 型キャスト: s := 時間.時間 / time.Duration(d)
  • 期間の割り当て: d := time.Duration(73.0)

あるいは、time.Hour を float64 に変換することもできます。 、除算を実行し、結果を変換して戻します。 time.Duration:

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

型なし定数について:

型なし定数は、使用されるコンテキストに応じてさまざまな型を取ることができます。この場合、型なし定数 73.0 は、float64 変数 d に代入される式で使用されるため、float64 型になります。ただし、式 time.Hour / 73.0 では、定数は time.Duration 値を使用した操作で使用されるため、time.Duration に変換されます。

以上がGo では「time.Hour / 73.0」は機能するのに、「time.Hour / d」は失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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