ホームページ >バックエンド開発 >Golang >Go で「time.Millisecond * int」はコンパイルに失敗するのに、「time.Millisecond * 1000」は成功するのはなぜですか?

Go で「time.Millisecond * int」はコンパイルに失敗するのに、「time.Millisecond * 1000」は成功するのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-11 14:40:03182ブラウズ

Why Does

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)

Resolution

この問題を解決するには、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 サイトの他の関連記事を参照してください。

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