Go における "time.Millisecond * int" の不一致について
提供されたコード スニペットでは、両方の式に乗算演算子 "*" が含まれています。 time.Milli Second 値を利用します。ただし、これらの式のコンパイル成功の間には差異があります。これを理解するために、Go での演算子の使用法の基礎を詳しく見てみましょう。
Go では、演算子の厳密な型チェックが強制され、オペランドが同一の型であることが要求されます。オペランドの型が異なる場合、演算にシフトまたは型なし定数が含まれていない限り、コンパイラはエラーを生成します。
最初のコード ブロックでは、最初のオペランド 1000 は型なし定数。定数のみを含む演算で型なし定数が使用される場合、その定数は暗黙的に他のオペランドの型に変換されます。この場合、time.Millisecond の型は time.Duration であるため、変換は成功します。
2 番目のコード ブロックでは、最初のオペランド i は変数です。 int 型。変数と型なし定数が演算に関与する場合、型チェック ルールにより暗黙的な変換は許可されません。したがって、コンパイラはエラーのフラグを立てます: 無効な操作: i * time.Millisecond (mismatched Types int and time.Duration)
この問題を解決するには、i 変数を明示的に変換できます。次のコードに示すように、time.Duration(i) 関数を使用して time.Duration に変換します。
var i = 1000 time.Sleep(time.Duration(i) * time.Millisecond)
この変換により、オペランドが同じ型であることが保証され、Go の型チェック要件を満たし、正常にコンパイルされるコード。
以上がGo で「time.Millisecond * int」はコンパイルに失敗するのに、「time.Millisecond * 1000」は成功するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。