0Pricing
Go Academy · Урок

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 — локальная установка не требуется.

Все уроки этого курса

  1. Глаголы Printf
  2. Sprintf и Fprintf
  3. Интерфейс Stringer
  4. Сканирование ввода
← Назад к Go Academy