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 サイトの他の関連記事を参照してください。