← Все этапы
04 · ПАКЕТЫ И НАДЁЖНОСТЬУрок 19 из 3318 минут

Форматирование с fmt

Форматируем значения для человека, собираем строки и пишем в разные потоки.

Вывод и форматирование

Пакет fmt умеет выводить значения и собирать форматированный текст. Print пишет значения подряд, Println добавляет пробелы между аргументами и перевод строки, а Printf подставляет значения в формат.

В строке формата verb начинается с % и задаёт представление следующего аргумента. Например, %s подходит строке, %d — целому числу, %t — логическому значению, а %v выбирает стандартное представление. Для отладки часто используют %#v, который показывает значение в Go-подобном виде, и %T для типа. Количество и порядок verbs должны соответствовать аргументам.

Пример

package main

import (
	"bytes"
	"fmt"
)

func main() {
	name := "Мира"
	visits := 3
	active := true

	fmt.Printf("%s: посещений %d, активна: %t\n", name, visits, active)

	card := fmt.Sprintf("%s (%d)", name, visits)
	fmt.Println(card)

	var report bytes.Buffer
	fmt.Fprintf(&report, "участник=%q; тип счётчика=%T\n", name, visits)
	fmt.Print(report.String())
}

Printf выводит форматированный текст в стандартный вывод. Sprintf возвращает готовую строку, которую можно сохранить или передать дальше. Fprintf пишет в переданный объект с методом Write; в примере это буфер в памяти. Verb %q заключает строку в кавычки, а %T печатает тип аргумента.

Внутри формат-строки последовательность \n означает перевод строки, \t — табуляцию, а \" — кавычку. Это специальные escape-последовательности Go, они не являются форматирующими verbs.

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

Практика

Попробуйте сами

Создай программу с именем товара, ценой в целых рублях и количеством на складе. С помощью Sprintf собери строку вида «Рюкзак: 2400 руб., остаток 5 шт.», выведи её через Println, а затем запиши в bytes.Buffer через Fprintf имя товара в кавычках и тип цены.

Проверка результата

Как понять, что получилось

Первая строка точно содержит «Рюкзак: 2400 руб., остаток 5 шт.». Вторая показывает имя в двойных кавычках и тип int. В программе использованы все три функции: Sprintf, Println и Fprintf.

Форматирование с fmt | Go | WebSchool · Go