Уроки модуля (5/5)
Ввод/вывод с помощью fmt
Пакет fmt стандартной библиотеки — ваш основной инструмент для печати на
консоль, форматирование строк и чтение ввода. Если вы использовали
printf в C вы будете чувствовать себя как дома, но с некоторыми дополнительными усовершенствованиями
благодаря глаголам %v и %T.
Print, Println, Printf: три функции, три поведения
fmt.Print("ciao ", "mondo") // "ciao mondo" (niente newline finale)
fmt.Println("ciao", "mondo") // "ciao mondo\n" (newline + spazi tra argomenti)
fmt.Printf("eta=%d\n", 36) // "eta=36\n" (format string esplicita)Глаголы, которые вы будете использовать постоянно
| Глагол | Что он печатает | Пример |
|---|---|---|
%v | «значение по умолчанию» — работает с любым типом | {Ada 36} |
%+v | вроде %v, но с именами полей в структурах | {Name:Ada Age:36} |
%#v | Представление значения «Go-синтаксис» | main.User{Name:"Ada", Age:36} |
%T | тип значения | float64 |
%d | целое число по основанию 10 | 42 |
%f | плавать | 3.140000 |
%.2f | с плавающей запятой с двумя десятичными знаками | 3.14 |
%s | строка | Ada |
%q | строка в кавычках (с кавычками и экранированием) | "Ada\n" |
%t | бул | true |
%x | шестнадцатеричный (строчный регистр) | 2a |
%b | двоичный | 101010 |
u := struct{ Name string; Age int }{"Ada", 36}
fmt.Printf("%v\n", u) // {Ada 36}
fmt.Printf("%+v\n", u) // {Name:Ada Age:36}
fmt.Printf("%T\n", 3.14) // float64Sprintf: создание строк без их печати
Тот же интерфейс, что и у Printf, но результат возвращается вам в виде
string:
msg := fmt.Sprintf("L'utente %s ha %d anni", "Ada", 36)
fmt.Println(msg) // L'utente Ada ha 36 anniВы будете использовать его постоянно для создания сообщений, журналов и ошибок.
Errorf: строки + перенос ошибок
fmt.Errorf создает error с форматированием в стиле Printf. С
специальным глаголом %w вы можете обернуть существующую ошибку, чтобы сохранить ее
цепочка (мы подробно рассмотрим это в модуле «Интерфейсы»):
if _, err := os.Open("missing"); err != nil {
return fmt.Errorf("apertura config: %w", err)
}Ваша очередь
Напечатайте строку «ciao mondo», используя fmt.Println.
Показать подсказку
`fmt.Println` принимает строку и добавляет новую строку.
Решение доступно после 3 попыток
Используйте fmt.Printf, чтобы напечатать «eta=36», за которым следует новая строка, используя глагол %d для целого числа.
Показать подсказку
`Printf` не добавляет новую строку: вам необходимо включить `\\n` в строку формата.
Решение доступно после 3 попыток
Какой глагол печатает динамический ТИП значения?
fmt.Printf("?\n", 3.14)Резюме
Print/Println/Printfразличаются пробелами и символами новой строки.%v— это подстановочный знак, который работает с любым типом;%+vпоказывает имена полей.%Tпечатает тип (полезно для быстрой отладки).Sprintfстроит строки;Errorfсоздает ошибки с переносом (%w).PrintfНЕ добавляет новую строку: напишите ее самостоятельно в строке формата.