Sprintf и Fprintf
Форматируйте строки и записи
«Sprintf и Fprintf» — бесплатный урок Go Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Семейство Printf
Пакет fmt содержит три родственных средства форматирования:
Printfзаписывает в стандартный вывод.Sprintfвозвращает отформатированную строку.Fprintfзаписывает в любой объект записи.
package main
import "fmt"
func main() {
fmt.Printf("hello %s\n", "world")
}Sprintf возвращает строку
fmt.Sprintf форматирует данные точно так же, как Printf, но вместо вывода возвращает результат в виде строки, которую можно сохранить или использовать повторно.
package main
import "fmt"
func main() {
msg := fmt.Sprintf("%s scored %d", "Bob", 95)
fmt.Println(msg)
}Создание идентификаторов
Sprintf удобно использовать для составления ключей, имён файлов или меток из отдельных частей.
package main
import "fmt"
func main() {
id := fmt.Sprintf("user-%04d", 42)
fmt.Println(id)
}Преобразование чисел в текст
Используйте Sprintf, чтобы превращать числа в аккуратно отформатированные строки, например в денежные суммы.
package main
import "fmt"
func main() {
label := fmt.Sprintf("Price: $%.2f", 7.5)
fmt.Println(label)
}Fprintf записывает в объект записи
fmt.Fprintf принимает io.Writer первым аргументом и форматирует данные в него. os.Stdout — один из таких объектов записи.
package main
import (
"fmt"
"os"
)
func main() {
fmt.Fprintf(os.Stdout, "to stdout: %d\n", 1)
}Запись в стандартный поток ошибок
Отправляйте диагностические сообщения в os.Stderr с помощью Fprintf, чтобы отделить их от обычного вывода.
package main
import (
"fmt"
"os"
)
func main() {
fmt.Fprintf(os.Stderr, "warning: %s\n", "low disk")
}Fprintf записывает в Builder
Поскольку strings.Builder также является io.Writer, Вы можете форматировать данные непосредственно в него, а затем получить строку.
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
fmt.Fprintf(&b, "%s=%d;", "x", 10)
fmt.Fprintf(&b, "%s=%d", "y", 20)
fmt.Println(b.String())
}Fprintf записывает в bytes.Buffer
bytes.Buffer — ещё одна распространённая цель для записи. Накопите содержимое, а затем преобразуйте его в строку.
package main
import (
"bytes"
"fmt"
)
func main() {
var buf bytes.Buffer
fmt.Fprintf(&buf, "row %d\n", 1)
fmt.Fprintf(&buf, "row %d\n", 2)
fmt.Print(buf.String())
}Sprint и Fprint без f
Варианты с f принимают строку формата. Уберите f для Sprint/Fprint: они просто объединяют аргументы, используя форматирование по умолчанию.
package main
import "fmt"
func main() {
s := fmt.Sprint("a", 1, true)
fmt.Println(s)
}Sprintln добавляет пробелы
fmt.Sprintln объединяет аргументы пробелами, добавляет перевод строки и возвращает полученную строку.
package main
import "fmt"
func main() {
s := fmt.Sprintln("x", 1, "y", 2)
fmt.Print(s)
}Выбор подходящего средства
Выбирайте средство в зависимости от назначения:
- Нужна строка? Используйте
Sprintf. - Записываете в стандартный вывод? Используйте
Printf. - Записываете в файл, буфер или поток ошибок? Используйте
Fprintf.
package main
import (
"fmt"
"os"
)
func main() {
s := fmt.Sprintf("count=%d", 3)
fmt.Fprintf(os.Stdout, "%s\n", s)
}Быстрая проверка
Какая функция возвращает отформатированный текст, а не выводит его?
Итоги: Sprintf и Fprintf
Вы изучили семейство средств форматирования:
Sprintfвозвращает строку.Fprintfзаписывает в любойio.Writer(стандартный вывод, стандартный поток ошибок, буферы и средства построения строк).- Варианты без
fиспользуют форматирование по умолчанию.
package main
import (
"fmt"
"strings"
)
func main() {
var b strings.Builder
fmt.Fprintf(&b, "result=%s", fmt.Sprintf("%d%%", 80))
fmt.Println(b.String())
}Часто задаваемые вопросы
Урок «Sprintf и Fprintf» бесплатный?
Да — полный текст урока «Sprintf и Fprintf» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Sprintf и Fprintf»?
Форматируйте строки и записи Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Sprintf и Fprintf»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Глаголы Printf
- Sprintf и Fprintf
- Интерфейс Stringer
- Сканирование ввода