суббота, 14 марта 2020 г.

Использование fmt.Printf в Golang

С пакетом fmt в Go вы можете форматировать числа и строки, дополненные пробелами или нулями, в разных основах и с дополнительными кавычками.

Вы отправляете строку шаблона, которая содержит текст, который вы хотите отформатировать, плюс несколько глаголов аннотации, которые сообщают функциям fmt, как форматировать конечные аргументы.

Printf

В этом примере fmt.Printf форматирует и записывает в стандартный вывод:

fmt.Printf("Binary: %b\\%b", 4, 5) 
// Печатает `Binary: 100\101`

  • строка шаблона имеет вид "Binary: %b\\%b"
  • глагол аннотации %b форматирует число в двоичном формате
  • специальное значение \\ является обратной косой чертой.

В особом случае глагол %%, который не использует аргументов, производит знак процента:

fmt.Printf("%d %%", 50) 
// Печатает `50 %`

Sprintf (форматирование без печати)

Используйте fmt.Sprintf для форматирования строки без ее печати:

s := fmt.Sprintf("Binary: %b\\%b", 4, 5) 
// s == `Binary: 100\101`

Нахождение ошибок fmt с помощью vet

Если вы попытаетесь скомпилировать и запустить эту некорректную строку кода

fmt.Printf("Binary: %b\\%b", 4) 
// Отсуствует аргумент для Printf

вы обнаружите, что программа скомпилируется, а затем напечатает

Binary: 100\%!b(MISSING)

Для раннего обнаружения ошибок такого типа вы можете использовать команду vet - она ​​может найти вызовы, аргументы которых не совпадают со строкой формата.

$ go vet example.go
example.go:8: missing argument for Printf("%b"): format reads arg 2, have only 1 args

Варианты использования fmt.Printf


Стандартные форматы и тип

Значение: []int64{0, 1}

Формат Глагол Описание
[0 1] %v Формат по умолчанию
[]int64{0, 1} %#v Формат синтаксиса Go
[]int64 %T Тип значения

Целое число (отступ, основание, знак)

Значение: 15

Формат
Глагол
Описание
15 %d Основание 10
+15 %+d Всегда показывать знак
␣␣15
%4d Отступ с пробелами (ширина 4, выравнивание по правому краю)
15␣␣
%-4d Отступ с пробелами (ширина 4, выравнивание по левому краю)
0015 %04d Отступ с нулями (ширина 4)
1111 %b Основание 2
17 %o Основание 8
f %x Основание 16, нижний регистр
F %X Основание 16, верхний регистр
0xf %#x Основание 16, с ведущим 0x

Символ (цитата, Unicode)

Значение: 65 (Unicode буква A)

Формат Глагол Описание
A %c Символ
'A' %q Цитируемый символ
U+0041 %U Unicode
U+0041 'A' %#U Unicode с символом

Логическое (true/false)

Используйте %t, чтобы отформатировать логическое значение как true или false.

Указатель (шестнадцатеричный)

Используйте %p для форматирования указателя с основанием 16 с начальным 0x.

Float (отступ, точность, научная запись)

Значение: 123.456

Формат Глагол Описание
1.234560e+02
%e Научная запись
123.456000 %f Десятичная точка, без экспоненты
123.46 %.2f Ширина по умолчанию, точность 2
␣␣123.46
%8.2f
Ширина 8, точность 2
123.456 %g Экспонент по мере необходимости, только необходимые цифры

Срез строк или байтов (кавычка, отступ, шестнадцатеричный)

Значение: "café"

Формат Глагол Описание
café %s Обычная строка
␣␣café %6s Ширина 6, выравнивание по правому краю
café␣␣ %-6s Ширина 6, выравнивание по левому краю
"café" %q Цитируемая строка
636166c3a9 %x шестнадцатеричный дамп байтовых значений
63 61 66 c3 a9 % x шестнадцатеричный дамп с пробелами

Специальные значения

Значение Описание
\a U+0007 оповещение или звонок
\b U+0008 backspace
\\ U+005c обратный слэш
\t U+0009 горизонтальный таб
\n U+000A перевод строки (line feed) или новая строка (newline)
\f U+000C form feed
\r U+000D возврат каретки
\v U+000b вертикальный таб

Произвольные значения могут быть закодированы с помощью обратной косой черты и могут использоваться в любом "" строковом литерале.

Существует четыре разных формата:

  • \x, за которыми следуют ровно две шестнадцатеричные цифры
  • \ за которыми следуют ровно три восьмеричные цифры
  • \u за которыми следуют ровно четыре шестнадцатеричные цифры
  • \U за которыми следуют ровно восемь шестнадцатеричных цифр

Экранирование \u и \U представляет кодовые точки Unicode.

fmt.Println("\\caf\u00e9") // Печатает \café


Читайте также:


Купить gopher

Комментариев нет:

Отправить комментарий