Пакеты fmt и strings
Форматирование вывода и обработка строк
«Пакеты fmt и strings» — бесплатный урок Go Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Go Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Go Academy содержит 4 уроков всего.
Обзор пакета fmt
Пакет fmt реализует форматированный ввод-вывод. Основные функции:
fmt.Print,fmt.Println,fmt.Printf— записывают данные в стандартный выводfmt.Sprint,fmt.Sprintf,fmt.Sprintln— возвращают строкиfmt.Fprint,fmt.Fprintf— записывают данные в любой объект io.Writerfmt.Scan,fmt.Scanf— считывают данные из стандартного ввода
Форматирующие глаголы fmt
Распространённые форматирующие глаголы для fmt.Printf:
package main
import "fmt"
func main() {
name := "Gopher"
age := 15
score := 98.6
fmt.Printf("%s is %d years old\n", name, age)
fmt.Printf("Score: %.1f%%\n", score)
fmt.Printf("Type: %T, Value: %v\n", age, age)
fmt.Printf("Hex: %x, Binary: %b\n", 255, 255)
fmt.Printf("Padded: %10s|%-10s\n", name, name)
}fmt.Sprintf для создания строк
fmt.Sprintf возвращает отформатированную строку, не выводя её на экран, — это удобно для создания строк:
package main
import "fmt"
func formatUser(name string, age int) string {
return fmt.Sprintf("User{name: %q, age: %d}", name, age)
}
func main() {
fmt.Println(formatUser("Alice", 30))
// User{name: "Alice", age: 30}
// %q adds quotes; %+v prints struct field names
type Point struct{X, Y int}
p := Point{1, 2}
fmt.Printf("%+v\n", p) // {X:1 Y:2}
}fmt.Errorf для форматирования ошибок
fmt.Errorf создаёт отформатированные значения ошибок:
package main
import "fmt"
func getUser(id int) error {
return fmt.Errorf("getUser(%d): user not found", id)
}
func main() {
err := getUser(42)
fmt.Println(err) // getUser(42): user not found
// Wrap errors with %w for unwrapping:
base := fmt.Errorf("base error")
wrapped := fmt.Errorf("context: %w", base)
fmt.Println(wrapped)
}Пакет strings: распространённые функции
Пакет strings предоставляет функции для обработки строк:
package main
import ("fmt"; "strings")
func main() {
s := " Hello, Go World! "
fmt.Println(strings.TrimSpace(s)) // "Hello, Go World!"
fmt.Println(strings.ToUpper(s)) // " HELLO, GO WORLD! "
fmt.Println(strings.ToLower(s)) // " hello, go world! "
fmt.Println(strings.Contains(s, "Go")) // true
fmt.Println(strings.HasPrefix(s, " Hel")) // true
fmt.Println(strings.Count(s, "l")) // 3
}strings.Split и strings.Join
strings.Split разделяет строку, а strings.Join объединяет срез:
package main
import ("fmt"; "strings")
func main() {
csv := "alice,bob,carol,dave"
names := strings.Split(csv, ",") // ["alice" "bob" "carol" "dave"]
fmt.Println(names)
upper := make([]string, len(names))
for i, n := range names {
upper[i] = strings.ToUpper(n)
}
result := strings.Join(upper, " | ")
fmt.Println(result) // ALICE | BOB | CAROL | DAVE
}strings.Replace и strings.ReplaceAll
Заменяйте вхождения подстроки:
package main
import ("fmt"; "strings")
func main() {
s := "foo bar foo baz foo"
// Replace first 2 occurrences
fmt.Println(strings.Replace(s, "foo", "XXX", 2))
// XXX bar XXX baz foo
// Replace all
fmt.Println(strings.ReplaceAll(s, "foo", "GO"))
// GO bar GO baz GO
}strings.Builder для эффективного объединения
Используйте strings.Builder для эффективного создания строк: это позволяет не выделять новую строку для каждого объединения:
package main
import ("fmt"; "strings")
func join(parts []string, sep string) string {
var sb strings.Builder
for i, p := range parts {
if i > 0 { sb.WriteString(sep) }
sb.WriteString(p)
}
return sb.String()
}
func main() {
fmt.Println(join([]string{"a", "b", "c"}, "-")) // a-b-c
}strings.NewReader и strings.Reader
strings.NewReader создаёт io.Reader из строки — это удобно для проверки функций, принимающих объекты чтения:
package main
import ("fmt"; "io"; "strings")
func readAll(r io.Reader) string {
data, _ := io.ReadAll(r)
return string(data)
}
func main() {
r := strings.NewReader("Hello from a string reader")
fmt.Println(readAll(r))
// Also: strings.NewReplacer for multiple replacements
rep := strings.NewReplacer("<", "<", ">", ">")
fmt.Println(rep.Replace("<b>bold</b>"))
}strings.Fields и strings.Map
Дополнительные полезные функции для работы со строками:
package main
import ("fmt"; "strings")
func main() {
// Fields splits on any whitespace (like awk)
words := strings.Fields(" one two three ")
fmt.Println(words) // [one two three]
// Map applies a function to each rune
rot13 := func(r rune) rune {
if r >= 'a' && r <= 'z' { return 'a' + (r-'a'+13)%26 }
if r >= 'A' && r <= 'Z' { return 'A' + (r-'A'+13)%26 }
return r
}
fmt.Println(strings.Map(rot13, "Hello, World!"))
}Быстрая проверка
Какую функцию следует использовать для эффективного объединения большого количества строк в Go?
Итоги: fmt и strings
Итоги:
fmt.Printf/Sprintf— для форматированного вывода и строк с форматирующими глаголами (%s %d %f %v %T %q)fmt.Errorf— для форматированных ошибок,%w— для обёртывания ошибокstrings.Split/Join,Contains,Replace,TrimSpace,ToUpper/Lowerstrings.Builder— для эффективного объединенияstrings.NewReader— чтобы использовать строку какio.Reader
Часто задаваемые вопросы
Урок «Пакеты fmt и strings» бесплатный?
Да — полный текст урока «Пакеты fmt и strings» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Go Academy, подпишись на CoddyKit PRO. Курс Go Academy содержит 4 уроков всего.
Чему я научусь в уроке «Пакеты fmt и strings»?
Форматирование вывода и обработка строк Ты практикуешь Go Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Go Academy?
Предыдущий опыт не требуется. Go Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Пакеты fmt и strings»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Go Academy?
Да. Каждый урок Go Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Пакеты fmt и strings
- strconv, math и sort
- Основы пакета time
- Пакеты os и filepath