С пакетом 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é
Читайте также:
- Строка, байт, руна, символ в Golang
- Обзор обработки строк в Golang
- Руны и кодировка символов в Golang
Комментариев нет:
Отправить комментарий