2013-05-10 14 views
8

Próbowałem:Jak mogę wydrukować stałą wartość uint64 w Go przy użyciu polecenia fmt?

fmt.Printf ("% d", math.MaxUint64)

ale mam następujący komunikat o błędzie:

stałe 18446744073709551615 przelewa int

Jak mogę to naprawić? Dzięki!

+1

Wygląda na to, że próbujesz przechowywać zbyt dużą liczbę w zmiennej typu "int". Zamiast tego użyj 'uint64'. –

+0

Moje przeprosiny, ale popełniłem błąd podczas pisania pytania. Zaktualizowałem go, aby odzwierciedlić to, co miałem na myśli. – abw333

Odpowiedz

20

math.MaxUint64 jest stałą, a nie int64. Zamiast tego spróbuj:

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

Problem polega na tym, że stała jest nietknięta. Stała przyjmuje typ zależny od kontekstu, w którym jest używany. W tym przypadku jest on używany jako interfejs {}, więc kompilator nie ma możliwości sprawdzenia, jakiego konkretnego typu użyć. W przypadku stałych całkowitych przyjmuje wartość domyślną int. Ponieważ twoje stałe przepełnienie jest int, jest to błąd czasu kompilacji. Przekazując uint64(num), informujesz kompilator, którego wartość ma być traktowana jako uint64.

Należy zauważyć, że ta konkretna stała zmieści się tylko w uint64, a czasami w uint. Jest nawet większy niż standardowe int64.

Powiązane problemy