2016-07-06 1 views
0

Я не могу понять, почему я получаю это сообщение об ошибке во время выполнения. Он срабатывает даже с помощью самого простого однострочного: strconv.FormatUint(uint64(123), 64)Почему я получаю ошибку Go «panic: strconv: незаконная база AppendInt/FormatInt»

Я понял что-то очень нехорошее здесь? Код компилируется просто отлично.

EDIT: найдено решение (как позже указано Тимом Купером). Я думаю, что the examples in the documentation запутаны:

s := strconv.FormatBool(true) 
s := strconv.FormatFloat(3.1415, 'E', -1, 64) 
s := strconv.FormatInt(-42, 16) 
s := strconv.FormatUint(42, 16) 

Когда вы используете только основание 64 и 16 в примерах, это довольно легко сделать неверный вывод. Однако теперь, когда я знаю, что не так, сообщение об ошибке имеет гораздо больше смысла.

+2

Что касается вашего редактирования: нет, где в документах используется 64 для базы; он используется только как бит. –

+1

Если вы хотите base64, как и для представления двоичных данных в не-двоично-безопасных средах, 'encoding/base64' дает вам это. – twotwotwo

+0

Является ли размер бит также для поплавка в примере выше? Я редактировал вопрос больше, чтобы сделать его более очевидным, к какой части документации, на которую я ссылался. Извините за путаницу. –

ответ

3

Основание 64 не поддерживается, как указано в the documentation:

func FormatUint(i uint64, base int) string 

FormatUint возвращает строковое представление I в данной базе, в течение 2 < = основанием < = 36.