Перейти к основному содержимому
Модуль 1 · Урок 5 из 55/50 в курсе~10 min
Уроки модуля (5/5)

Ввод/вывод с помощью fmt

Пакет fmt стандартной библиотеки — ваш основной инструмент для печати на консоль, форматирование строк и чтение ввода. Если вы использовали printf в C вы будете чувствовать себя как дома, но с некоторыми дополнительными усовершенствованиями благодаря глаголам %v и %T.

Print, Println, Printf: три функции, три поведения

Go
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целое число по основанию 1042
%fплавать3.140000
%.2fс плавающей запятой с двумя десятичными знаками3.14
%sстрокаAda
%qстрока в кавычках (с кавычками и экранированием)"Ada\n"
%tбулtrue
%xшестнадцатеричный (строчный регистр)2a
%bдвоичный101010
Go
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) // float64

Sprintf: создание строк без их печати

Тот же интерфейс, что и у Printf, но результат возвращается вам в виде string:

Go
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 вы можете обернуть существующую ошибку, чтобы сохранить ее цепочка (мы подробно рассмотрим это в модуле «Интерфейсы»):

Go
if _, err := os.Open("missing"); err != nil {
    return fmt.Errorf("apertura config: %w", err)
}

Ваша очередь

Упражнение#go.m1.l5.e1
Попыток: 0Загрузка…

Напечатайте строку «ciao mondo», используя fmt.Println.

Загрузка редактора…
Показать подсказку

`fmt.Println` принимает строку и добавляет новую строку.

Решение доступно после 3 попыток

Упражнение#go.m1.l5.e2
Попыток: 0Загрузка…

Используйте fmt.Printf, чтобы напечатать «eta=36», за которым следует новая строка, используя глагол %d для целого числа.

Загрузка редактора…
Показать подсказку

`Printf` не добавляет новую строку: вам необходимо включить `\\n` в строку формата.

Решение доступно после 3 попыток

Quiz#go.m1.l5.e3
Готово

Какой глагол печатает динамический ТИП значения?

Go
fmt.Printf("?\n", 3.14)
Варианты ответа

Резюме

  • Print/Println/Printf различаются пробелами и символами новой строки.
  • %v — это подстановочный знак, который работает с любым типом; %+v показывает имена полей.
  • %T печатает тип (полезно для быстрой отладки).
  • Sprintf строит строки; Errorf создает ошибки с переносом (%w).
  • Printf НЕ добавляет новую строку: напишите ее самостоятельно в строке формата.