2013-05-10 12 views
8

私が試した:fmt.Printf( "%d個"、math.MaxUint64)fmtを使用してGoで定数uint64を印刷するにはどうすればよいですか?

が、私は次のエラーメッセージました:

定数18446744073709551615のオーバーフローが

をint型を

どうすればこの問題を解決できますか?ありがとう!

+1

「int」型の変数に大きすぎる数値を格納しようとしているように見えます。代わりに 'uint64'を使用してください。 –

+0

申し訳ありませんが、質問を書く際に間違いました。私はそれが私の意図を反映するように更新しました。 – abw333

答えて

20

math.MaxUint64は、int64ではなく定数です。代わりにお試しください:

fmt.Printf("%d", uint64(num)) 

ここでの問題は、定数が型なしであることです。定数は、使用されるコンテキストに応じて型を取る。この場合、インタフェース{}として使用されているため、コンパイラは使用する具体的な型を知る方法がありません。整数定数の場合、デフォルトはintです。定数が整数をオーバーフローするので、これはコンパイル時エラーです。 uint64(num)を渡すことにより、コンパイラに値をuint64として扱うよう通知することになります。

この特定の定数は、uint64と時にはuintにのみ収まることに注意してください。それは標準のint64よりもさらに大きくなります。

関連する問題