Latest posts

Go Update
22 Aug, 10:03edited
Об изоляции LLMДа, это ещё один пост про работу с Codex/Claude/GLM/Qwen/DeepSeek и прочая. В этот раз без воды, исключительно технический.Решил я тут вкатится в разработку с помощью LLM всерьез и пойти через, уже почти ставшие стандартом, «план -> реализация -> тест -> повторить». Касаемо шагов, скиллов, плагинов и прочего говорить не буду — тут каждый сам «кузнец своего счастья» и индустрия пока только осознает необходимость общего подхода. Меня же заинтересовало другое — изоляция агентов, в процессе их работы, от деструктивных и «вредных» действий.Проблема: «настоящая» изоляция ни у одного из агентов/харнессов не сделана на приемлемом уровне «из коробки». OpenCode запрещает чтение выше своего рабочего каталога, но спокойно пропускает команду head -10 /home/file/name. Codex и Claude, используя API песочницы ОС, спокойно пропускают ручки LLM до хомяка и других каталогов, правдаDockerDocker Sandboxes | Sandboxes for Coding Agents | DockerSecure sandboxes for Claude Code, Gemini, Codex, and Kiro. Run coding agents with microVM-based isolation.
Go Update
11 Aug, 20:59edited
🎂 Настал тот день когда мне исполнилось 33! Да, да тот самый год, в который вас поздравляют используя аналогии к одной из самых ярких личностей в истории человечества 😁️️️️️️. В (не)далеком детстве, когда мне было лет 7-8, я смотрел на взрослых, которым
Go Update
11 Aug, 20:59edited
🎂 Настал тот день когда мне исполнилось 33! Да, да тот самый год, в который вас поздравляют используя аналогии к одной из самых ярких личностей в истории человечества 😁️️️️️️. В (не)далеком детстве, когда мне было лет 7-8, я смотрел на взрослых, которым
Go Update
13 Jul, 17:53edited
📝 testing: allow examples with any signatureНебольшое «Quality of Life» предложение. Суть: давайте разрешим функциям Example, которые мы используем для документации, принимать и возвращать любое число аргументов. Запрос связан с тем, что сейчас многие вещи не выразить в примерах. Например примеры для пакетов нацеленных на тестирование.Те в документации станет отображаться следующий код:func Example_Functionname(t testing.T) { t.Logf("foobar") }Единственным ограничением является то, что в отличии от безаргументных Example функций, они не смогут содержать // Output: комментарии.func Example_Functionname(t testing.T) { // will not compile t.Logf("foobar") // Output: foobar }Напомню, что такие комментарии автоматически переводят примеры в тесты — их прогоняет go test и сверяет их вывод с тем, что идёт в блоке комментария после Output. Что было довольно удобно для проверки (иGitHubtesting: allow examples with any signature · Issue #79808 · golang/goThis is an offshoot of #64993 (comment), and an alternative to #21111 and #64993. Proposal: We make go doc display any function named Example or ExampleXxx where Xxx does not start with a lowercase...
Go Update
14 May, 07:03edited
📝 net/http/httptest: synctest supportЯ уже писал про пакет synctest и его возможности. Это была одна из главных фишек Go 1.25, здорово облегчившая тестирование конкурентного кода. Главный минус данного пакета, на мой взгляд, это его слабая интегрированность в стандартную библиотеку. И, похоже, эту проблему наконец решено начать исправлять.Большинство из нас работает с HTTP-серверами (включая gRPC, который является сабсетом HTTP/2) в том или ином виде. Для тестирования этих серверов у нас есть пакет net/http/httptest, который позволяет легко поднять тестовый HTTP-сервер, отвечающий на запросы, используя реальный loopback-интерфейс. Запущенный тестовый сервер также легко создаёт подключенного к себе клиента, который, в свою очередь, работает одинаково хорошо с обычным соединением и TLS-режимом без сложных махинаций с корнем сертификатов. Однако у этого подхода есть минус: так как онGitHubnet/http/httptest: synctest support · Issue #76608 · golang/goProposal Details I use the httptest package a lot, and in particular NewServer rather than ResponseRecorder, because it picks up subtle real-world issues that don't appear when not using the en...
Go Update
13 May, 19:44
Я редко пишу сюда о вещах которые не относятся к Go, но тут у меня появилась хорошая статья на вечер. Которая про «архитектуру безопастности» и «самом слабом звене» и перекликается с прошлым сообщением. Только в обычном-бытовом значении.Рекомендую.ПС. Все совпадения реальны 😊️️️️️️.


Go Update
12 May, 16:46edited
⚠️ CVE-2026-42501 или почему вам нужно обновиться до Go 1.26.3/go1.25.10 ⚠️Те кто давно работают с Go (или читают меня) знают, что целостность наших модулей гарантируется не только HTTPS транспортом до самой прокси, но и отдельной базой SumDB, которая хранит в себе хеши модулей подписанные приватным ключом. При этом сама база устроена так, что невозможно внести изменения в прошлые записи, без каскада изменений в новые, тк каждый блок «подписан» предыдущим.Но в ИБ сама безопастность это устойчивость самого слабого звена в цепочке. Достаточно одной маленькой ошибки, что-бы вся надежно выстроенная архитектура ИБ превратилась в пыль. Так и случилось в нашем случае.Рассмотрим сценарий: при получении модуля от прокси, Go проверяет его хеш с использованием SumDB, блоки которой, как я уже говорил выше, подписаны приватным ключом. В псевдокоде это выглядит следующим образом:for _, lineTelegramGo UpdateПро go mod tidy | verify | download Задумывались ли вы о том, как именно Go проверяет целостность ваших скаченных модулей? Как наш тулчейн проверяет, что зависимости которые вы видите в своем проекте, соответствуют зависимостям которые видят другие разработчики?…
Go Update
14 Apr, 09:46edited
🩳 proposal: spec: type inferred composite literals 🩳Вы когда-нибудь задумывались, почему можно писать вот такой код:type T struct{ V int }a := []T{{0}, {1}, {2}} b := map[string]T{"a": {0}, "b": {1}, "c": {2}} c := [3]T{{0}, {1}, {2}}Но нельзя вот такой:var x []string = {"a", "b", "c"} var y []T = {{0}, {1}, {2}} var z T = {0}Всё дело в довольно сложных правилах вывода типов для сложных типов. Ещё в первых версиях создатели языка резонно решили, что одного объявления при инициализации достаточно и нет смысла дублировать идентификатор типа для каждого элемента отдельно. Что, в свою очередь, очень помогло в табличных тестах. Но вот сделать ещё один шаг им не хватило смелости уверенности в том, что код сохранит свою читаемость. А это было и остаётся критически важно для языка.Однако всё течёт, всё меняется, и запрос на tuples (кортежи) или их аналог регулярно всплывал вgo.devThe Go Programming Language Specification - The Go Programming Language
Go Update
14 Apr, 08:26edited
✍️ go fix: apply fixes from modernizers ✍️Есть такая утилита в тулчейне Go — go fix. В задачу которой входила модернизация кода под новые конструкции — как в языке, так и в стандартной библиотеке. Эдакий аналог go fmt который вместо единого стиля, выравнивал использования языковых конструкций по кодобазе. И вроде отличная идея, но с одной проблемой: почти десять лет никто её не поддерживал и не модернизировал. Те сама утилита осталась в далеких временах Go 1.8. Причина подобного довольно тривиальна: нет необходимости в обобщенной модернизации кода, а значит нет и свободных ресурсов под это. Тем более сам go fix был написан с использованием большого числа костылей, которые усложняли любую попытку модернизации.Однако всё изменилось с приходом LLM: модели OpenAI, Anthropic, Alibaba и прочих обучаются на огромных массивах данных в свободном доступе и код генерируют исходя из увиденного.go.devIntroducing Gofix - The Go Programming LanguageHow to use go fix to update your code with each new Go release.
Go Update
9 Apr, 16:37
А ещё внезапно узнал, что у меня новая фамилия.


Go Update
9 Apr, 16:08
Запись нашего февральского с Эдгаром подкаста о том как мы дошли до жизни такой.
Go Update
9 Apr, 16:06
forwarded from @allo_ada
Новый выпуск трека Golang в партнерстве с GolangConf! 💪Как применять будут Go в будущем? Чтобы это понять, надо понять то, как его применяли в прошлом, и самое важное, понять, а почему Go таков, какой он есть?В новом выпуске с Дмитрием Матреничевым мы поговорили на тему того, как родился, развивался и развивается Go? Почему наш язык такой бедный в сравнении с Java? Как его развивали, а также кто? И всегда нужно помнить самое важное - какое он место займет в агенто-центричной разработке?Получился очень насыщенный и самое важное - интересный выпуск про то, как же развивался Go и куда он может идти дальше?Смотрим подкаст и заряжаемся гошной энергией: 🎥 YouTube 🎥 VK


Go Update
23 Feb, 11:35edited
AI или не AI Весьма интересное обсуждение - стоит ли использовать AI для разработки Go? Рас Кокс очень обстоятельно отвечает всем интересующимся: засуньте уже себе в ...! На саммо деле, нет конечно, все очень прилично, но суть примерно как я описал выше.TelegramЭдгар СипкиПро AI, DevTools и разработку: как строить продукты и инженерные workflow. Связь: @zergsLaw Сайт: https://sipki.online/
Go Update
23 Feb, 08:56
forwarded from @kodikapusta
AI или не AIВесьма интересное обсуждение - стоит ли использовать AI для разработки Go? Рас Кокс очень обстоятельно отвечает всем интересующимся: засуньте уже себе в ...!На саммо деле, нет конечно, все очень прилично, но суть примерно как я описал выше. Он подчёркивает, что, несмотря на все изменения в индустрии, фундаментальные принципы разработки ПО остаются неизменными. Самое важное - сохранять существующие процессы код-ревью и стандарты качества: код, созданный с помощью AI, должен проходить ту же тщательную проверку, что и написанный вручную, а ответственность за качество, поддержку и отсутствие нарушений авторских прав по-прежнему лежит на контрибьюторе. Хотя Google разрешает использование таких инструментов, участники проекта не должны делегировать им критическое мышление или отправлять код, который они сами предварительно не проанализировали и не доработали#golang #aihttps


Go Update
12 Feb, 17:36
🎉 Вышел Go 1.26! 🎉Не получилось написать об этом день в день, поэтому пишу на следующий день.Ключевое из релиза:• Функция new теперь принимает не только типы, но и обычные аргументы. Т.е. раньше можно было писать new(int), а теперь станет возможным ещё и new(42). Использовать в качестве замены &MyStruct{…} (т.е. new(MyStruct{…}) не рекомендую, тк генерирует менее производительный код. Подробно про новую поведение функции я писал тут.• Type-parameters в типах теперь могут ссылаться сами на себя:type Adder[A Adder[A]] interface { Add(A) A }Это довольно техническое изменение, которое позволит авторам библиотек со всякими коллекциями лучше выражать требования к типам от пользователя. Если вы не сталкивались с этой проблемой, значит вы счастливый человек и для вас ничего не поменяется.• go fix полностью переделали: теперь он модернизирует код, заменяя устаревшие конструкцииgo.devGo 1.26 Release Notes - The Go Programming Language
Go Update
24 Jan, 09:30
😳😳 proposal: spec: generic methods for Go 😳😳Я не так часто пишу тексты в выходные, но тут случилось исключение, которое я не ожидал увидеть от слова «совсем»: Go Team (а именно Роберт Гризмер, один их трех «столпов» Go) предлагает добавить в язык дженерик методы.Тут надо сделать отступление: просьбы об этом от сообщества шли давно. Невозможность иметь дженерик методы существенно усложняла часть кода и делала невозможными «поточные» типы. Но сами просьбы разбивались о взаимодействие интерфейсов и дженерик методов у типов: настолько часты были эти просьбы и ответное разъяснение, что в Go FAQ есть специальный пункт про это, который я очень рекомендую прочитать что-бы осознать суть (и глубину) проблемы.We do not anticipate that Go will ever add generic methodsТак что-же поменялось? Ну во первых «запрос о добавлении дженерик методов в Go» один из самых популярных. 49085 набралоgo.devFrequently Asked Questions (FAQ) - The Go Programming Language
Go Update
12 Jan, 08:35edited
🚀️️️️️️ proposal: spec: direct reference to embedded fields in struct literals 🚀️️️️️️Embedding структур часто используется как некая «замена наследованию», для того что-бы объединить общий код для нескольких типов внутри одного встраиваемого типа. Это довольно удобно, тк вместе с полями мы получаем еще и методы структуры, при этом обращаться к ним можно как через имя встроенной структуры, так и напрямую. Напримерtype E struct { A int }type T struct { E }var v T v.E.A = 100 println(v.A)Однако «символьная» инициализация подобной структуры всегда требовала полный синтаксис:v := T{E: E{A: 1}}GitHubspec: direct reference to embedded fields in struct literals · Issue #9859 · golang/go(Status: referred from LanguageChange to Proposal. --adonovan) Consider type E struct { A int } type T struct { E } This works: T{E: E{A: 1}} This does not: T{A: 1} Makes some struct literals more ...
Go Update
12 Jan, 07:48
Антон традиционно публикует список нововведений которые приедут к нам с Go 1.26. Самое интересное это new(…expr…), pprof для ловли утечки горутин и обновленный go fix. Рекомендую ознакомится, тем более всё представлено в интерактивном виде.TelegramThank Go!Здравый взгляд на язык программирования Go. Злой админ @nalgeon. Добрый админ @mikeberezin. Рекламы нет.
Go Update
12 Jan, 07:42
forwarded from @thank_go
Интерактивный тур по Go 1.26Опубликовал традиционный тур по будущему релизу (на англ). Часть фич мы с вами уже разобрали, а часть еще разберем, но если хотите прочитать все вместе уже сейчас — добро пожаловать.Вот что вошло:— new(expr) — Безопасная проверка ошибок — Новый «чайный» GC — Ускоренный cgo и выделение памяти — SIMD для amd64 — Секретный режим — Криптография без ридеров — Профиль для ловли утекающих горутин — Метрики состояния горутин — Итераторы в reflect — Подсматривание в байтовый буфер — Дескриптор процесса ОС — Сигнал как причина в контексте — Сравнение IP-подсетей
Go Update
11 Dec 2025, 11:47edited
Про go mod tidy | verify | download (Part 2)Получается, что на практике подделать запись (или случайно закараптить модуль) довольно сложно, тк проверка идет из нескольких мест. Однако потенциальная атака существует:• Атакующий может переписать модуль, его архив и ziphash файлы. • Затем атакующий переписывает хеш внутри go.sum ваших проектов. • Тогда, даже если вы перед сборкой делаете go mod download и go mod verify, то компилятор не заподозрит подмену.Проблема этой атаки заключается в том, что стоит вам вычистить ziphash файлы из кеша и вся эта схема разваливается. Одна сложность — отдельной команды я под это не нашел, но в качестве замены можно взять следующую командуfind $GOPATH/pkg/mod/cache/ -type f -name ".ziphash" | xargs -rn1 rm
Related Channels
Other channels in the same section of the catalogue.
