😳😳 proposal: spec: generic methods for Go 😳😳 Я не так часто пишу тексты в выходные, но тут случилось исключение, которое я не ожидал увидеть от слова «совсем»: Go Team (а именно Роберт Гризмер, один их трех «столпов» Go) предлагает добавить в язык дженерик методы. Тут надо сделать отступление: просьбы об этом от сообщества шли давно. Невозможность иметь дженерик методы существенно усложняла часть кода и делала невозможными «поточные» типы. Но сами просьбы разбивались о взаимодействие интерфе...
Go Update
Канал про новости связанные с языком программирования Go. Эволюция языка, стандартной библиотеки и просто интересные вещи над которыми работает Go Core Team и не только. Админ: @lepage_d
Графики
📊 Средний охват постов
📉 ERR % по дням
📋 Публикации по дням
📎 Типы контента
Лучшие публикации
20 из 20🎉 Вышел Go 1.26! 🎉 Не получилось написать об этом день в день, поэтому пишу на следующий день. Ключевое из релиза: • Функция new теперь принимает не только типы, но и обычные аргументы. Т.е. раньше можно было писать new(int), а теперь станет возможным ещё и new(42). Использовать в качестве замены &MyStruct{…} (т.е. new(MyStruct{…}) не рекомендую, тк генерирует менее производительный код. Подробно про новую поведение функции я писал тут. • Type-parameters в типах теперь могут ссылаться сами на ...
🏗️ gogrep — инструмент для семантического поиска внутри вашей кодовой базы. 🏗️ Наверняка много кому приходилось сталкиваться с ситуацией «надо по коду найти вызовы по определенному паттерну». Чаще всего для этого мы используем регулярные выражения (grep, ag, rg). Однако у них всех есть один минус — они интерпретируют файлы как текст, а не как код. Из-за этого в результаты поиска попадают как нужные нам места вызова, так и комментарии, участки текста и прочая. Решение этой проблемы: семантическ...
✔️ errors.AsType — типобезопастная замена errors.As ✔️ Тем временем, в 1.26 нас (вероятно) ждет еще одно приятное изменение: дженерики наконец доберутся до пакета errors. Все изменение проще описать тремя строчками кода. В 1.25 у нас вот так: var pe fs.PathError if errors.As(err, &pe) { fmt.Println("Failed at path:", pe.Path) } А в 1.26 можно будет вот так: if pe, ok := errors.AsTypefs.PathError; ok { fmt.Println("Failed at path:", pe.Path) } Вроде и небольшое изменение, но оно ведет, как миниму...
❄️ runtime/secret: add new package: о тех кто застрял в лимбе. Как часто вы зануляете память? Подозреваю, что ответ большинства Go разработчиков будет где-то между "никогда" и "зачем?". И действительно, в большинстве приложений такая задача никогда не появляется.…
Я тут выступать подписался на 14ую Стачку в Питере. 2го октября на сей конференции, я буду рассказывать про интересное: Итераторы: не опять, а снова. Расскажу про дизайн и эволюцию итераторов. Начну с того, как про них писали в "Паттернах проектирования" и какими были итераторы в Go 1.0. Как разработчики пришли к текущему дизайну "range-over-func", какие проблемы пришлось решить (почему переделали циклы for). Почему большинство Go разработчиков уже пишет итераторы, но еще не знает об этом. Расск...
👁Визуализатор нашего трехцветного сборщика мусора. Сегодня на подкасте я упомянул, что у нас трехцветный сборщик мусора. Для меня, как человека, который привык разбирать вещи «на практике или в действии» самым лучшим объяснением выступил визуализатор от ребят из Pusher который они сделали в рамках своей своей статьи про его особенности. И хотя статье уже почти 8 лет, ничего из основ, которые в нее положены, с тех пор не поменялось. В общем: очень и очень рекомендую. Так-же есть хорошая статья п...
🚀 Расширение функции new для создания указателя на значения 🚀 Отличные новости! Предложение, обсуждение которого которого длится уже больше четырех лет и которое выдвинул сам Роб Пайк, наконец-то подходит к принятию приняли! В чем суть: есть у нас встроенная функция new, которая принимает тип и возвращает указатель на значение этого типа. Хорошая функция, однако исторически так сложилось, что она была в тени оператора "&" который использовался и для создания указателей на комплексные типы и дл...
Я только сейчас понял, что у нас снова, за долгое время, совпали цифры релиза и года. Причем впервые совпали обе цифры. В последний раз это был Go 1.6 и совпала только последняя. Таймлайн: go1.0 2012-03-28 go1.1 2013-05-13 go1.2 2013-12-01 go1.3 2014-06-18 !go1.4 2014-12-10 !go1.5 2015-08-19 !go1.6 2016-02-17 go1.7 2016-08-15 go1.8 2017-02-16 go1.9 2017-08-24 go1.10 2018-02-16 go1.11 2018-08-24 go1.12 2019-02-25 go1.13 2019-09-03 go1.14 2020-02-25 go1.15 2020-08-11 go1.16 2021-02-16 go1.17 2021-...
Про go mod tidy | verify | download (Part 2) Получается, что на практике подделать запись (или случайно закараптить модуль) довольно сложно, тк проверка идет из нескольких мест. Однако потенциальная атака существует: • Атакующий может переписать модуль, его архив и ziphash файлы. • Затем атакующий переписывает хеш внутри go.sum ваших проектов. • Тогда, даже если вы перед сборкой делаете go mod download и go mod verify, то компилятор не заподозрит подмену. Проблема этой атаки заключается в том, ч...