Golang Дайджест
8K subscribers
36 photos
1 file
168 links
Самое интересное из мира Go: новости, статьи, проекты, сервисы, изменения в языке и др.

Посты публикуются не часто - только самое важное, с чем я лично ознакомился.

Поэтому можно не мьютить канал =)

Обратная связь: @justskiv
Download Telegram
Forwarded from Go Update
🎉 Вышел Go 1.23! 🎉

Ключевые нововведения:
Итераторы — больше вот тут. TLDR: теперь можно делать range по таким функциям:


func(func() bool)
func(func(K) bool)
func(func(K, V) bool)


• Opt-in телеметрия — опциональный сбор метрик и периодическая отправка их. Детальный док вот тут. TLDR: эта вещь позволяет понять как часто и каким командами пользуются Go разработчики, какие флаги они применяют и как часто люди сталкиваются с ошибками компилятора. Статистика обезличенная, а сам формат полностью в открытом доступе. Важно! Сбор по умолчанию включен, но никуда не отсылает метрики. Включить отправку можно с помощью команды go telemetry on. Выключить полностью можно с помощью команды go telemetry off.
• Директива godebug в go.mod файлах.
• Больше нельзя обратится к неэкспортируемым именам в стандартной библиотеке с помощью //go:linkname (за исключением ряда функций).
time.Timer и time.Ticker больше не нужно останавливать для того, что-бы сборщик мусора смог их собрать. Во вторых, канал который ассоциирован с этими таймерами теперь небуферизированный и гарантирует, что в канале нет данных после остановки. Другими словами, после остановки time.Timer и time.Ticker больше не требуется пытаться вычитать данные из канала, на случай если таймер уже истек и послал данные в канал. Включается только если go.mod содержит go 1.23.0 и выше. Заметку про это обновление можно прочитать вот тут.
• Пакет unique. Про него тоже писал раньше.
Много функции для итераторов.

Полное описание релиза вот тут.
🔥418👍7
Развлекаемся с итераторами в Go

Перевод и оригинал

Очередной пост про итераторы в Go. Не воспринимайте его как руководство к действию, такого посыла там и нет. Скорее как повод порассуждать.

В чём суть. Автор недоволен громоздкими конструкциями по типу:

// В пакете slices нет функций Map, Filter или ForEach
// Это просто пример
slices.ForEach(
slices.Filter(
slices.Map(
slices.Reverse(slices.All([]int{1,2,3,4})),
func(i int) int { return i * i},
),
func(i int) bool { return i % 2 == 0 }
),
func(i int) { fmt.Println(i) }
)


И хочет сделать как в JS:

From([]int{1,2,3,4}).
Reverse().
Map(func(i int) int { return i * i }).
Filter(func(i int) bool { return i%2 == 0 })


Поэтому он реализовал методы: From (создание итератора), Collect (сбор в слайс), Each (обход), Reverse (разворот), Map (преобразование) и Filter.

Получается, конечно, красиво, но автор сам же признаёт:

я понимаю почему команда Go реализовала итераторы по другому


А я напомню, что желание красоты, без учёта других потребностей, когда-то привело людей к CoffeeScript.

#iterators #go_1_23
👍8🤔3