Стандартная библиотека

Обзор стандартной библиотеки Go: fmt, strings, strconv, time и encoding/json.

Сила Go во многом — в его богатой стандартной библиотеке. Многое, для чего в других языках тянут внешние пакеты, в Go есть «из коробки».

strings: работа с текстом

Пакет strings покрывает почти все операции со строками: поиск, замену, регистр, разбиение, склейку.

package main

import (
    "fmt"
    "strings"
)

func main() {
    s := "Привет, Go"
    fmt.Println(strings.ToUpper(s))
    fmt.Println(strings.Contains(s, "Go"))
    fmt.Println(strings.Replace(s, "Go", "мир", 1))
    fmt.Println(strings.Split("a,b,c", ","))
}

Вывод:

ПРИВЕТ, GO
true
Привет, мир
[a b c]

strconv: числа и строки

Преобразования между строками и числами — это strconv. Atoi (строка в int), Itoa (int в строку), ParseFloat и другие. Все они возвращают ошибку, если разбор не удался.

package main

import (
    "fmt"
    "strconv"
)

func main() {
    n, _ := strconv.Atoi("42")
    fmt.Println(n + 8)
    fmt.Println(strconv.Itoa(100) + "!")
}

Вывод:

50
100!

time: даты и длительности

Пакет time отвечает за моменты времени и интервалы. У Go необычный, но запоминающийся формат дат: эталон 2006-01-02 15:04:05 (по нему и задают шаблон).

package main

import (
    "fmt"
    "time"
)

func main() {
    d := 90 * time.Minute
    fmt.Println(d)            // 1h30m0s
    fmt.Println(d.Hours())    // 1.5
}

Вывод:

1h30m0s
1.5

encoding/json: сериализация

JSON в Go встроен. Структуру превращают в JSON через json.Marshal и обратно через json.Unmarshal. Имена полей в JSON задают тегами в обратных кавычках. Экспортируются только поля с заглавной буквы — это важно.

package main

import (
    "encoding/json"
    "fmt"
)

type User struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    u := User{Name: "Аня", Age: 30}
    data, _ := json.Marshal(u)
    fmt.Println(string(data))

    var u2 User
    json.Unmarshal([]byte(`{"name":"Борис","age":25}`), &u2)
    fmt.Println(u2.Name, u2.Age)
}

Вывод:

{"name":"Аня","age":30}
Борис 25
ПакетДля чего
fmtввод-вывод, форматирование
stringsоперации со строками
strconvстроки ⇄ числа
timeвремя и длительности
encoding/jsonJSON-сериализация
os, io, net/httpфайлы, потоки, сеть

Итог

  • Стандартная библиотека закрывает строки, числа, время, JSON, файлы и сеть без внешних пакетов.
  • В encoding/json теги полей задают имена ключей; сериализуются только экспортируемые поля.
  • Документация любого пакета — на pkg.go.dev и через go doc.
Проверьте себя
1. Какой пакет преобразует строку в число?
Astrings
Bstrconv
Cfmt
Dmath
2. Какие поля структуры попадут в JSON при json.Marshal?
AВсе поля
BТолько экспортируемые (с заглавной буквы)
CТолько со строчной буквы
DТолько помеченные тегом
3. Где смотреть документацию пакета стандартной библиотеки?
AТолько в исходниках
BНа pkg.go.dev и через go doc
CНигде, её нет
DВ go.mod
Поддержать проект