Go では、期間、浮動小数点、および型なし定数に対する操作を実行しようとすると、さまざまな動作が発生する可能性があります。ここでは、2 つの類似したコード行を詳しく見ていき、一方は機能するのにもう一方は機能しない理由を説明します。
式 time.Hour / 73.0 は次のとおりです。短い変数宣言。右側の式は、time.Duration (1 時間の定数値) と型なし数値定数 (73.0) の間の除算です。
time.Duration は整数型 (int64) であるため、型なし定数は time.Duration に変換されます (精度を損なうことなく)。したがって、除算の結果は time.Duration 値になり、これを使用して、指定された時間の小数部分をスリープすることができます。
対照的に、式 time.Hour / d は、d が正しい型ではないため失敗します。
最初の行では、型により d は float64 として宣言されています。型なし定数 73.0 から推定されます。ただし、time.Hour (time.Duration) を d (float64) で除算しようとすると、異なる型を直接操作できないため、Go は型不一致エラーを発生させます。
この行を機能させるには、d を time.Duration に変換する必要があります。これを行うにはいくつかの方法があります。
あるいは、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 サイトの他の関連記事を参照してください。