Как я могу распечатать константу uint64 в Go с помощью fmt?

Я пытался:

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

но я получил следующее сообщение об ошибке:

константа 18446744073709551615 переполняет int

Как я могу это исправить? Спасибо!


person abw333    schedule 10.05.2013    source источник
comment
Мне кажется, вы пытаетесь сохранить слишком большое число в переменной с типом int. Вместо этого используйте uint64.   -  person    schedule 10.05.2013
comment
Прошу прощения, но ошибся при написании вопроса. Я обновил его, чтобы отразить то, что я имел в виду.   -  person abw333    schedule 10.05.2013


Ответы (1)


math.MaxUint64 - это константа, а не int64. Вместо этого попробуйте:

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

Проблема здесь в том, что константа нетипизирована. Тип константы зависит от контекста, в котором она используется. В этом случае он используется как интерфейс {}, поэтому компилятор не может узнать, какой конкретный тип вы хотите использовать. Для целочисленных констант по умолчанию используется значение int. Поскольку ваша константа переполняет int, это ошибка времени компиляции. Передавая uint64(num), вы сообщаете компилятору, что хотите, чтобы значение рассматривалось как uint64.

Обратите внимание, что эта конкретная константа подходит только для uint64, а иногда и для uint. Значение даже больше, чем может содержать стандартный int64.

person Stephen Weinberg    schedule 10.05.2013
comment
В каком отношении uint64 больше, чем int64? Я бы предположил, что больше для обозначения размера бита, который одинаков для обоих типов, отсюда и суффикс 64. Может быть, вы хотели вместо этого обратиться к диапазону значений? Но диапазон также одинаков для обоих типов, просто диапазоны начинаются и заканчиваются разными значениями. - person TheDiveO; 28.01.2020
comment
Это не самый точный язык, но это константа, и значение константы больше, чем может содержать int64. Я отредактировал предложение для ясности. - person Stephen Weinberg; 04.02.2020