ホームページ  >  記事  >  バックエンド開発  >  Go で Time.Sleep(i * time.Millisecond) がコンパイルに失敗するのはなぜですか?

Go で Time.Sleep(i * time.Millisecond) がコンパイルに失敗するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-11 15:50:03957ブラウズ

Why Does Time.Sleep(i * time.Millisecond) Fail to Compile in Go?

Go における時間継続演算の落とし穴

Go では、時間関連の操作を扱うために time.Time 型と time.Duration 型が広く使用されています。ただし、整数の乗算とこれらの型を扱う場合、混乱が生じる可能性があります。

次のコードは、この混乱を例示しています。

//works
time.Sleep(1000 * time.Millisecond)

//fails
var i = 1000
time.Sleep(i * time.Millisecond)

2 番目のコード ブロックは、型の不一致によりコンパイルに失敗します。 。コード内の両方の 1000 は整数のように見えますが、そうではありません。

Go では、シフトまたは型なし定数を含む演算子を除き、演算子には同じ型のオペランドが必要です。この例では、乗算を使用します。これは、オペランドが同一である必要があることを意味します。

最初の行の 1000 は、型なしの定数です。操作で使用すると、他のオペランドの型 (この場合は time.Duration) に自動的に変換されます。ただし、2 行目では、i は int 型の宣言された変数であるため、型の不一致が生じます。

この問題を解決するには、乗算を実行する前に i を time.Duration に変換する必要があります。以下に例を示します。

var i = 1000
time.Sleep(time.Duration(i) * time.Millisecond)

i を time.Duration に変換すると、乗算とその後の time.Sleep 呼び出しが成功します。

以上がGo で Time.Sleep(i * time.Millisecond) がコンパイルに失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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