Язык программирования Go https://4gophers.ru/
3 440подписчиков сейчас
70.0%ERR
1.0цитируемость
5постов/день
Русскийязык
Россиягео
Подписаться в Telegram
Данные обновлены 22.07.2020
Публикации всего: 62
C на Go
#golang
Интересный пропозал - добавить возможность сборки Go-пакетов, использующих cgo для взаимодействия с C-библиотеками, без установленного C-тулчейна
Предлагается описывать C-интерфейс на языке Go с помощью аннотаций //cgo:binding, а cmd/cgo будет генерировать прослойку на Go и ассемблере, обрабатывая C ABI самостоятельно. Это избавит конечных пользователей от необходимости ставить C-компилятор, упростит кросскомпиляцию, а пакетам нужно будет лишь один раз сгенерировать или написать binding-файл
Но! Пока непонятно как обеспечить синхронизацию binding-файлов с C-кодом и как поступить с пакетом runtime/cgo, который пока содержит C-код
https://kodikapusta.ru/news/1219-c-na-go
Поддержать проект на boosty и читать в MAX
Rune
#golang
Команда Unstable Build заопенсорсила свою нативную IDE Rune, написанную на Go.
Под капотом - GPU-ускорение, собственный терминал, REPL и расширяемое ядро, которое общается с расширениями по gRPC. Поддерживается, конечно, Go, а еще Rust и Zig.
И еще у них появилась необычная программа вознаграждения контрибьюторов. Контрибьюторы сохраняют авторские права, а часть выручки компании пойдет в общий пул, распределяемый по прозрачному и публично проверяемому реестру вкладов. При этом участие в программе опционально.
Возможно, я даже попробую слезть с VS Code и наконец-то начать пользоваться хоткеями
А как она шикарно запускается!
https://kodikapusta.ru/news/1216-rune
Поддержать проект на boosty и читать в MAX
Прокси для базы данных
#golang
Автор пишет простой такой прокси на Go в учебных целях вдохновившись статьей Figma о том, как их команда баз данных построила DBProxy для перехвата SQL-запросов и маршрутизации их по разным узлам Postgres.
Он реализует проксирование TCP-соединений между клиентом и MySQL: перехватывает пакеты, находит команду COM_QUERY по структуре пакета MySQL и переписывает имя таблицы. В статье объясняется структура MySQL-пакета и демонстрируются базовые принципы, на которых строятся настоящие решения для шардинга, валидации запросов, безопасности и наблюдаемости
https://kodikapusta.ru/news/1208-proksi-dlia-bazy-dannykh
Поддержать проект на boosty и читать в MAX
У нас отмена!
#golang
Статья разбирает, как пакет singleflight в Go предотвращает лавину запросов к кэшу. Он прекрасно схлопывает одинаковые запросы в одну операцию, но есть нюансы
Автор на примере IsleDB показывает "ловушку контекста первого вызывающего": если фетч использует контекст лидера, тот может отменить операцию для всех, а если контекст отсоединен, то хрен сделаешь грейсфул шатдаун. В итоге автор строит собственный протокол конкурентности с тремя гарантиями - каждый вызывающий может независимо прекратить ожидание, общая операция отменяется при уходе последнего ждущего, а гатдаун отклоняет новые вызовы, отменяет активную работу и ждет остановки всех воркеров
https://kodikapusta.ru/news/1197-u-nas-otmena
Поддержать проект на boosty и читать в MAX
Конкурентный сервер на Go
#golang #learn
Это восьмая часть серии о конкурентных сетевых серверах, в этот раз посвященная Go. В прошлый раз было про Rust
Автор показывает, как язык решает описанные ранее задачи. Статья начинается с последовательного сервера с state machine, затем показывает конкурентную версию с одной горутиной на клиента.
Для ограничения параллелизма предлагаются счетный семафор на канале и паттерн воркер пул, когда нужно сохранять состояние между задачами.
Логично, что в Go почти никогда не нужно прибегать к async/event-driven программированию, потому что конкурентность встроена в язык и рантайм. Но интересно смотреть в сравнении с другими языками
https://kodikapusta.ru/news/1203-konkurentnyi-server-na-go
Поддержать проект на boosty и читать в MAX
Интересные баги
#golang
Команда sigma star(хз кто это) нашла и исправила давнюю ошибку в рантайме Go, проявлявшуюся только на 32-битных встраиваемых Linux-системах.
Приложение периодически падало с ошибкой "runtime: netpoll: eventfd ready for something unexpected". Корень проблемы оказался в том, что Go хранит в 8-байтовом поле ev.Data два типа указателей - сырой указатель на event fd и тегированный указатель на pollDesc, а сравнение на 32-битных little-endian системах считывает лишь младшие 4 байта, из-за чего адрес event fd алиасился с fdseq. Как только долгоживущая программа накапливала миллионы пересозданных pollDesc, netpoll путал сокет с event fd и падал
Ребята прям недра залезли. Представляю как они все это дебажили
https://kodikapusta.ru/news/1198-interesnye-bagi
Поддержать проект на boosty и читать в MAX
🔥 5 🤔 2
Перейти к публикации →
GopherCon UK 2026
#golang #video
Видосы с GopherCon UK 2026 подоспели. Много всего интересного. Девид Чейни, Билл Кеннеди и другие широко известные в узких кругах докладчики.
И даже про AI есть вполне адекватные доклады
https://kodikapusta.ru/news/1196-gophercon-uk-2026
Поддержать проект на boosty и читать в MAX
❤ 1 🔥 1
Перейти к публикации →
Используем Datastar
#golang
В статье интеренсно про использование Datastar. Я вот первый раз про него услашал
Автор рассказывает, как построить веб-версию утилиты htop используя Go-бэкенд и, собственно, гипермедиа-фреймворк Datastar. Вместо фронтенд-фреймворка вроде React здесь HTML-патчи отправляются напрямую с сервера через Server-Sent Events. Вся интерактивность задается декларативными data-* атрибутами, поэтому клиентский код остается минимальным.
Системные метрики собираются библиотекой gopsutil, HTML шаблон вшивается в бинарник через go:embed, поэтому все приложение - это один бинарь
Кончено, Datastar не заменит React или Vue, но отлично подойдет для случаев, когда состояние живет преимущественно на бэкенде. В целом, это довольно интересный подход
https://kodikapusta.ru/news/1195-ispol-zuem-datastar
Поддержать проект на boosty и читать в MAX
На Rust после Go
#rust #golang
Автор, пять лет писавший на Go, сначала скептически отнесся к появлению Rust в его команде.
Но появился проект, в котором нужны были низкое потребление памяти и mpmc-обмен сообщениями. Пожтому несколько CLI и сервисов решили переписать на Rust и это заставил его освоить язык всерьез.
Переход оказался непростым. Больше всего дались строгость компилятора, макросы и, главное, borrow checker(ну конечно) и async с лайфтаймами, которые он советует изучить в первую очередь. Теперь он ценит именно эту строгость.
В итоге автор рекомендует если Go справляется, то использовать Go. А Rust брать при реальных ограничениях по памяти, стабильности и близости к железу. Ну или если вы ебнулись и решили все переписать на Rust с помощью AI
https://kodikapusta.ru/news/1189-na-rust-posle-go
Поддержать проект на boosty и читать в MAX
😁 13 👍 3
Перейти к публикации →
tnk9x
#golang #gamedev #tools
Современный ремейк классической аркадной игры Battle City, написанный на Go с использованием движка Ebiten и запускаемый как нативно, так и в браузере через WebAssembly. Проект сочетает любовь к оригиналу с изучением Go и разработки игр.
Реализованы полный игровой цикл с защитой штаба, управление для двух игроков, разрушаемая местность, все пять типов поверхностей, четыре типа врагов и все шесть бонусов. Враги, кстати, на на Lua-скриптах реализованы
https://kodikapusta.ru/tools/43-tnk9x
Поддержать проект на boosty и читать в MAX
Rozetked
ВИЛСАКОМ РЕД / WYLSACOM RED
Библиотека программиста
[netstalkers]
Типичный программист
СТАС БОМБИТ