Go で異なるデータ型を扱うとき、特に値を比較するとき、型間の変換が必要になることがよくあります。一般的なシナリオの 1 つは、int64 から int への変換です。この記事では、そのような変換に対する最適なアプローチを提供し、潜在的な落とし穴に焦点を当てます。
Go で int64 を int に変換するプロセスは簡単です。変換を実行するには、次のような型変換式を使用するだけです。
var a int var b int64 int64(a) < b
異なる型の値を比較する場合、小さい型を大きい型に変換することが重要です。反対方向に変換すると、データが切り捨てられ、間違った比較が行われる可能性があります。
次の Go コードを考えてみましょう:
var x int32 = 0 var y int64 = math.MaxInt32 + 1 // y == 2147483648 if x < int32(y) { // this evaluates to false, because int32(y) is -2147483648 }
この場合、比較を試みています。 int32(y) は y の実際の値を切り捨て、実質的に変更するため、x を int32(y) に変換すると、不正確な評価になります。 -2147483648 にします。このような問題を回避するには、小さい型を大きい型に変換することを常にお勧めします。
特定のコード例では、maxInt を int に変換するには次の調整が必要になります。
for a := 2; a < int(maxInt); a++ {
この変更により、比較が正しく実行されることが保証されます。ただし、maxInt がシステムの int 型の最大値を超える場合、変換が失敗する可能性があることに注意することが重要です。このリスクを軽減するには、潜在的なオーバーフローを防ぐために、maxInt に int64 などのより大きなデータ型を使用することを検討してください。
以上がGo で int64 を int に安全に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。