Go & IT
1.3K subscribers
18 photos
55 links
Мы любим программирование, особенно если это Go ;)

Наш ламповый чатик: @go_stepik
Сотрудничество и реклама: @semyon_dev
Download Telegram
Топ 15 самых распространённых ошибок при разработке на Golang https://habr.com/ru/articles/904658/
👍8
В августе планируется релиз go1.25, начинаем разбираться что нового в этом релизе 🖼️

📦 Спустя 13 лет разработчики решили добавить "Add+Done" wrapper. Теперь не нужно вручную писать Add(1) перед запуском горутины и defer Done() внутри неё. Всё это делает Go() автоматически. Сравним:
Go 1.24:
var wg sync.WaitGroup

wg.Add(1)
go func() {
defer wg.Done()
fmt.Println("go 1")
}()

wg.Add(1)
go func() {
defer wg.Done()
fmt.Println("go 2")
}()

wg.Wait()
fmt.Println("done")

Go 1.25:
var wg sync.WaitGroup

wg.Go(func() {
fmt.Println("go 1")
})

wg.Go(func() {
fmt.Println("go 2")
})

wg.Wait()
fmt.Println("done")

Простое изменение, которое делает код чище и надёжнее.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍19😁6🤔3🔥21
Продолжаем разбираться с go1.25 который должен выйти уже в этом месяце. В предыдущих версиях encoding/json struct-теги были довольно ограниченными, но в новом пакете encoding/json/v2 появилась мощная опция format, которая позволяет задавать специальное форматирование для разных типов: дат, чисел, байтовых массивов и тд. Пример:
package main

import (
"encoding/json/v2" // импортируем новый пакет
"math"
"time"
)

type Data struct {
// time.Duration в формате "1h0m0s" (строка)
Duration time.Duration `json:"duration,format:units"`

// time.Duration в секундах (числом)
DurationSec time.Duration `json:"duration_sec,format:sec"`

// time.Time в формате "YYYY-MM-DD"
Date time.Time `json:"date,format:'2006-01-02'"`

// []byte как base64url
B64 []byte `json:"b64,format:base64url"`

// float64 с поддержкой NaN и ±Inf в виде строки
Val float64 `json:"val,format:nonfinite"`

// nil slice выводится как null (а не [])
List []int `json:"list,format:emitnull"`
}

func main() {
data := Data{
Duration: time.Hour,
DurationSec: time.Hour,
Date: time.Now(),
B64: []byte("base64url"),
Val: math.NaN(),
}

dataJson, err := json.Marshal(data)
// ...
}

Получившийся json:
{
"duration": "1h0m0s",
"duration_sec": 3600,
"date": "2025-08-01",
"b64": "YmFzZTY0dXJs",
"val": "NaN",
"list": null
}

Раньше приходилось вручную реализовывать MarshalJSON или писать вспомогательные поля, теперь же стало чуточку удобнее 🙌
🔥15👍6🤩21