Обновить
128K+

Go *

Компилируемый, многопоточный язык программирования

104,54
Рейтинг
Сначала показывать
Порог рейтинга

Представлен открытый проект AIKON — приложение, которое позволяет использовать Claude, ChatGPT, Gemini и Grok на старых Nokia 2007 года.

Ранее проект назывался Claude S40. До выхода версий 0.10.x (для мобильного приложения) и 0.7.x (для серверной части) он носил имя Claude S40, поскольку взаимодействовал только с Claude. Теперь, когда добавлена ​​поддержка OpenAI, Gemini и Grok, проект получил название AIKON («Nokia», написанное в обратном порядке). Репозиторий был перенесен с emir/claude-s40 на emir/AIKON (GitHub автоматически перенаправляет запросы со старого адреса), однако в названиях Java-пакетов и серверных компонентов сохранилось прежнее имя.

AIKON — это ИИ-чат-клиент для устройств Nokia серий S40 и S60 (платформа Java ME, спецификации CLDC 1.1 / MIDP 2.0), работающий в связке с компактным сервером на языке Go. Вы можете выбрать модель для каждого чата (Claude, OpenAI, Gemini или Grok), вводить текст с помощью кнопочной клавиатуры и получать ответы на экране с разрешением 240x320 пикселей. Доступны такие функции, как поиск актуальных новостей, прогноза погоды и курсов валют в интернете; длинные ответы можно просматривать постранично. Интерфейс переведён на турецкий, английский, испанский, португальский, французский, немецкий, русский и индонезийский языки. Приложение протестировано на моделях Nokia 6300 (S40) и Nokia E63 (S60 с QWERTY-клавиатурой).

Теги:
+2
Комментарии0

Что не так с языком Go?

Go давно стал основным языком бэкенда в российском бигтехе. Его выбирают за простоту: код легко читать, а бэкендер, который писал на другом языке, начинает работать с Go уже через неделю-другую. Но за простотой иногда прячутся ошибки рантайма, а дженерики, которых ждали почти десять лет, получились ограниченными. Мы в Авито тоже пишем на Go, хотя нравится нам в нём далеко не всё. И Rust, который даёт больше гарантий при работе с памятью, так его и не потеснил.

В новом выпуске «Бэкенд расправил плечи» Коля Губин и Арсен Абдусаламов разбираются, за что разработчики любят и критикуют Go. В гостях Владимир Балун, бывший тимлид Яндекса и автор YouTube-канала о Go.

🎧 Слушайте выпуск подкаста на подкаст-платформах:

VK Видео 

YouTube

Ещё больше экспертизы собрали для вас на сайте: смотрите наши лонгриды, новости, и видео. А узнать, как стать частью команды AvitoTech, можно вот здесь.

Теги:
+5
Комментарии1

Приглашаем на Ozon Tech Platform Meetup

30 октября встречаемся в Москве, в лофте Casa Picassa на короткие доклады и глубокие технологические дискуссии. 

Все сервисы, о которых поговорим, написаны на Go. Но мы ждём не только Go-разработчиков. Будем рады всем, кто интересуется платформенной инженерией или просто хочет узнать, как всё устроено у нас.

Регистрируйтесь на странице события и присоединяйтесь

Темы выступлений:

  • Под капотом Ozon: как устроена технологическая платформа.
    Михаил Кабищев, руководитель департамента разработки PaaS, о задачах Платформы сегодня, о стандартах разработки, CI/CD, сетевой инфраструктуре, мониторинге и инфраструктурных сервисах.

  • Как мы оптимизировали более 4 000 сервисов на Go перед сезоном распродаж.
    Денис Крупецкий, руководитель группы разработки Go-платформы, о том, как мы освободили 7000+ CPU в масштабе более 4 000 микросервисов на Go.

  • Олимп: как устроен портал платформы данных в Ozon?
    Артемий Сероокий, руководитель платформы управления и визуализации данных, о том, как мы организовали взаимодействие с множеством сервисов и построили удобный интерфейс, который можно развивать независимо от изменений бэкенда.

Митап проведёт Марина Самойлова, руководитель направления платформы данных.

До встречи!

Теги:
0
Комментарии0

10 ноября в Москве пройдёт Go Birthday Conf от RWB

Отметим день рождения Golang вместе с экспертами RWB, YADRO, Т-Банка, VK и Avito. Разберём кейсы из продакшена, поговорим о highload и будущем Go в эпоху AI

.
.

В программе:

➡️ Доклады:

  • 10 лет Go глазами практика: как менялся язык и что с ним сейчас;

  • SIMD без ассемблера: что изменилось и какой прирост производительности можно получить;

  • Архитектура доставки продуктовых метрик под высокой нагрузкой;

  • Геокодинг и построение маршрутов под нагрузкой.

➡️ Дискуссия «Go в эпоху AI» — обсудим, как меняется разработка, что остаётся инженеру и почему растёт роль инженерного мышления.

➡️ Воркшоп и архитектурные каты, где можно порешать задачи вместе с другими участниками.

Ждём Go-разработчиков, backend-инженеров, тимлидов и всех, кто работает с highload и архитектурой или хочет разобраться, как AI меняет разработку.

📍 Москва
Старт в 15:00

➡️ Программа и регистрация

Теги:
0
Комментарии0

Вышел fx 40!

fx — интерактивный терминальный просмотрщик и процессор таких форматов как JSON.

В версии 40 теперь можно писать запросы прямо в интерфейсе и видеть, как результаты обновляются по мере ввода, а также использовать форматы XML, HTML, EDN и MAML на входе и команды в стиле vim.

GitHub

ChangeLog

Теги:
+2
Комментарии0

Вышел gomponents 1.4.0 !

Gomponents - фреймворк, который позволяет описывать HTML-компоненты на чистом Go. Он генерирует HTML5 и позволяют легко создавать компоненты многократного использования. Благодаря этому вы можете сосредоточиться на разработке приложения, а не на изучении html.

Основная новика релиза - официальный навык (skill) для агента.

Пример работы с html в gomponents:

package main

import (
	. "maragu.dev/gomponents"
	. "maragu.dev/gomponents/components"
	. "maragu.dev/gomponents/html"
)

func Navbar(authenticated bool, currentPath string) Node {
	return Nav(
		NavbarLink("/", "Home", currentPath),
		NavbarLink("/about", "About", currentPath),
		If(authenticated, NavbarLink("/profile", "Profile", currentPath)),
	)
}

func NavbarLink(href, name, currentPath string) Node {
	return A(Href(href), Classes{"is-active": currentPath == href}, Text(name))
}

GitHub: https://github.com/maragudk/gomponents

ChangeLog: https://github.com/maragudk/gomponents/releases/tag/v1.4.0

Теги:
0
Комментарии0

Статический анализатор — это полезный инструмент, и Go разработчики знают это не понаслышке благодаря go vet. Но что, если его возможностей не хватает? Искать новый инструмент? Или сделать… свой?!

В докладе разобрали встроенные в Go инструменты и возможности для разбора кода. Узнали, что лежит под капотом статического анализа, что такое семантическая модель, и построили синтаксическое дерево.

А нужно это всё для того, чтобы в итоге написать собственный анализатор, который будет искать ошибки под ваш конкретный проект.

Посмотреть запись можно тут:
- VK Video
- Rutube
- YouTube
- Наш сайт

Приятного просмотра! Ждем ваши комментарии 😉

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

🔖 Наводим красоту в htop

Все мы любим htop - цветастый, кликабельный, удобный топчик. Но не смотря на то, что в большинстве случаев хватает варианта из коробки, в нем большие возможности для кастомизации.

Я не хочу долго расписывать как и что настраивать, а просто дам вам однострочник который сделает всю магию. Он по сути он просто бекапит текущий конфиг (если он вообще был) и забирает из https://gist.github.com/itcaat/45ea5994d66378fc4bd647cab860a05f новый.

mkdir -p ~/.config/htop && [ -f ~/.config/htop/htoprc ] && mv ~/.config/htop/htoprc ~/.config/htop/htoprc.bak.$(date +%Y%m%d%H%M%S); curl -fsSL "https://gist.github.com/itcaat/45ea5994d66378fc4bd647cab860a05f/raw" -o ~/.config/htop/htoprc

После этого запускаем htop и наслаждаемся.

—

Telegram | Github | YouTube | X

Теги:
Всего голосов 10: ↑1 и ↓9-8
Комментарии13

Как проверить, что после обновления АТС люди слышат друг друга — без двух телефонов и тестировщика

Сделал расширение для k6, где абоненты - объекты в скрипте: звонят друг другу через АТС и проверяют АОН, переводы и слышимость. Один скрипт — и регресс в CI, и нагрузка на тысячи звонков. Под картинкой - настоящий вывод: лесенка SIP сигнализации одного звонка из trace() и метрики расширения.

Подробно, со схемами звонков и разбором «под капотом» — в статье: https://habr.com/ru/articles/1086816/

Теги:
Всего голосов 3: ↑3 и ↓0+5
Комментарии0

Изучал коммиты, которые попали в релиз Go 1.27 и наткнулся на ряд улучшений, которые не отобразили в release notes.

Интересующие нас коммиты в этом посте: f4bfb1a9c6, 9be7615aa2, 5af294bac7, 84e0c4965a, 1bcfdf2df2.

Главное: теперь на heap перестанут утекать аргументы переданные в замыкания, если компилятор сможет статически определить, какая функция будет вызвана. Проблема была в том, что компилятор не знал, кто именно будет вызван, и консервативно считал, что все аргументы вызова утекают в heap.

Давайте посмотрим на пару примеров:

func Apply() int {
	var f func([]int) int
	f = func(p []int) int { return p[0] * 2 }
	arr := make([]int, 2)
	return f(arr)
}

Пример достаточно вычурный, но явно показывает разницу.

Бенчмарки: Go 1.26:

BenchmarkApply-10                	93288418	        11.95 ns/op	      16 B/op	       1 allocs/op

Go 1.27:

BenchmarkApply-10                	590856250	         2.028 ns/op	       0 B/op	       0 allocs/op

Компиляция с -gcflags=-m сразу укажет на причину.

Go 1.27:

./demo.go:26:6: func literal does not escape
./demo.go:27:13: make([]int, 2) does not escape

Go 1.26:

./demo.go:26:6: func literal does not escape
./demo.go:27:13: make([]int, 2) escapes to heap

Но не все так просто. У меня есть и контрпример, когда escape analysis промахивается:

var g func(*int) int = func(p *int) int { return *p * 3 }

func ApplyUnresolvable() int {
	var f func(*int) int
	f = func(p *int) int { return *p * 2 }
	f = g
	return f(new(int))
}

А в этом примере аргумент замыкания f убежит на хип, потому что в момент вызова f(new(int)) в f может лежать любое из присвоенных значений. Значение g компилятор доказать не может — это переменная уровня пакета, её содержимое escape analysis не отслеживает, то есть «аргумент может утечь куда угодно». Например, что если g будет запускать goroutine внутри. Поэтому тут компилятор выбирает консервативное поведение.

Теперь я покажу, как с переходом с 1.26 на 1.27 можно получить почти восьмикратное ускорение!

type Node struct {
	Val      int
	Children []*Node
}

func Sum(root *Node) int {
	var visit func(*Node) int
	visit = func(n *Node) int {
		t := n.Val
		for _, c := range n.Children {
			t += visit(c)
		}
		return t
	}
	return visit(root)
}

func BuildAndSum(v int) int {
	root := &Node{Val: v, Children: []*Node{{Val: 1}, {Val: 2}}}
	return Sum(root)
}

Здесь ни один экземпляр Node не утечет на хип! Смотрим на бенчмарки. Go 1.26

BenchmarkBuildAndSum-10          	17728094	        66.86 ns/op	     112 B/op	       4 allocs/op

Go 1.27

BenchmarkBuildAndSum-10          	148023318	         8.561 ns/op	       0 B/op	       0 allocs/op

Как и обещал ускорение примерно в 8 раз :)

P.S. Вообще удивительно как интересные вещи пропускают в release notes. Я нашел как минимум еще три изменения, которых нет в release notes, но прямо влияющих на перф. Одна из них так вообще прямо влияет на то как мы пишем бенчмарки! Но об этом в другой раз ;)

Если вам понравилась статья и вы хотите узнать про три других изменения, то заглядывайте в мой Telegram-канал.

Теги:
Всего голосов 2: ↑1 и ↓10
Комментарии0

После Ruby/Elixir в Go, часть 1

Когда я начал писать на Go после опыта с Ruby и Elixir, одной из самых непривычных вещей стало отсутствие консоли, в которой можно напрямую вызывать код приложения.

Для рубиста такая консоль почти универсальный пульт управления приложением(но пульт довольно опасный). Если нужно посмотреть, что происходит с конкретным пользователем, можно просто открыть консоль, найти его, вызвать нужный метод и понять, почему, например, не работает какая-то функция.

Набираешь:

bundle exec rails c

И через несколько секунд уже находишься внутри приложения и можешь работать с его кодом и данными. Только вместо кнопок у разработчика код. Надо помнить: «С большой силой приходит большая ответственность». © Дядя Бен.

Например, приходит вопрос:

Почему у этого пользователя не появился доступ к фиче?

В Rails можно открыть консоль, вызвать нужный код и довольно быстро проверить несколько гипотез. Когда я пришёл в Go, первое время постоянно хотелось сделать то же самое. Конечно, проверить код всё равно можно. Можно написать тест или небольшую программу, подключиться к базе, сделать отдельную CLI-команду под конкретный кейс, но это уже не то ощущение: «открыл приложение и начал быстро проверять гипотезы».

Ruby здесь не единственный пример. В Elixir есть интерактивная консоль IEx. Можно запустить прямо внутри неё:

iex -S mix

Благодаря возможностям Erlang VM можно даже подключаться консолью к другому запущенному узлу. И вот после Ruby и Elixir Go ощущается особенно необычно. В Ruby удобную консоль обычно даёт фреймворк. В Elixir сама платформа хорошо приспособлена к интерактивной работе с запущенной системой.

В Go это ощущается так:

Если хочешь что-то вызвать, сделай для этого нормальную точку входа.

Поначалу это раздражает. Кажется, что раньше на проверку гипотезы уходило 5–10 минут, а теперь приходится что-то дополнительно писать, но со временем я увидел в этом и другую сторону. Удобная консоль очень легко позволяет разработчику стать частью бизнес-процесса. Про эту боль я подробнее писал в статье. Также можно легко сломать продакшен.

Нет нужной кнопки в админке?

Попросим разработчика выполнить команду.

Нужно поправить состояние пользователя?

Разработчик сделает через консоль.

Для небольшого бизнеса это действительно может быть удобно. Но потом внезапно оказывается, что важная операция в продукте существует только потому, что рядом есть разработчик, который знает правильную команду. Я такой подход называю Developer as an admin panel.

В Go отсутствие такого универсального пульта начинает раздражать раньше. Если одна и та же операция повторяется, довольно быстро хочется сделать для неё CLI, скрипт, админку или нормальный API. Бизнес раньше начинает видеть ценность такого инструмента.

Я всё ещё считаю консоли в Ruby/Elixir невероятно удобными инструментами. Но теперь, когда хочется в очередной раз сделать что-то вручную, полезно задать себе вопрос:

Мне действительно не хватает консоли или не хватает нормального инструмента?

Теги:
Всего голосов 3: ↑3 и ↓0+3
Комментарии5

Модульный фреймворк для гибкого тестирования на Go — Testo

Если у вас десятки тысяч тестов, сложные сценарии, а тестам не хватает наглядных отчетов – наше опенсорс-решение может вам помочь

Testo — это слой над testing.T внутри экосистемы Go. Мы наполнили его плагинами, чтобы гибко адаптироваться под потребности и быстро создавать тесты под любую задачу.

Что ещё может Testo

1. Параметризировать тесты.

2. Параллелить тесты.

3. Собирать тесты в Suite'ы.

4. Формировать Allure-отчёты.

5. Перезапускать упавшие тесты.

И многое другое, благодаря плагинам.

Больше информации о функционале и ссылка на GitHub — на страничке фреймворка.

Теги:
Рейтинг0
Комментарии1

Анализаторы кода легко и быстро умеют находить множество ошибок, не очевидных с первого взгляда. Попробуйте посоревноваться с PVS‑Studio в прозорливости!

Мы сделали новый квиз «Найдите ошибки в Go коде»!

Вас ждут 10 фрагментов кода, в которых наш анализатор нашёл ошибки. Все они взяты из известных Open Source проектов. Ваша задача — успеть найти ошибку за 60 секунд (не переживайте, фрагменты небольшие).

Время посоревноваться с анализатором! А потом можно и его проверить 😉

Переходите по ссылке!

Теги:
Всего голосов 4: ↑3 и ↓1+4
Комментарии2

Ближайшие события

Подключайся к онлайн-митапу MWS — эксперты поделятся опытом организации стабильных Go-сервисов ⚙️

MTC Web Services (MWS) приглашает на митап для Go-разработчиков. Подключайтесь онлайн к встрече 11 августа в 15:00, чтобы узнать, как эксперты из MWS и Cloud.ru строят высоконагруженные системы. Спикеры разберут три ключевых слоя Go-сервисов на реальных кейсах и продакшн-опыте.

Вас ждет три технических доклада:

1. «Построение агентов на A2A с изолированным исполнением на Go»

Go-разработчик Вера Касьяненко из MWS расскажет, как построить ИИ-агентов  с выполнением потенциально опасных действий в изолированной среде, используя A2A и Client-go, и какие ограничения необходимы для этой изоляции. Она разберет модель угроз, жизненный цикл задачи и ограничения для безопасного исполнения.

2. «Как разрабатывать эффективные и экономичные Kubernetes-операторы на Go»

Алексей Ковалев из Cloud.ru на примере реального cluster-wide оператора покажет, как снизить потребление памяти с 7,5 ГБ до 400 МБ, а P95 цикла согласования —- со 150 до 40 мс. Он расскажет о кешировании, индексации и балансе между производительностью и стоимостью.

3. «Точный Rate Limiting на API Gateway в мульти-ЦОД инфраструктуре»

Андрей Пушкарев из MWS Octapi расскажет, почему готовые решения Redis, In-Memory Data Grid и Gossip-протокол — не выдерживают требований по нагрузке и латентности в их инфраструктуре, и как они написали собственную систему шеринга состояния и алгоритм ограничения нагрузки на бэкенд.

📅 Когда: 11 августа (вторник) в 15:00, онлайн

👉 Регистрируйся, чтобы послушать про опыт инженеров, задать вопросы и обсудить собственные кейсы.

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Привет!

Появилась идея: локальная база знаний, строящаяся по коду проекта на вашем компе и способная человеческим языком отвечать на вопросы по проекту, помогающая джунам быстро вкатиться в суть, а синьорам бегло проверить что они сломают очередным обновлением. Интересно ли было вам таким пользоваться? Помогло ли бы оно?

Поделитесь в комментариях)

Upd. Спасибо за комментарий, важная оговорка: проект работает локально на вашем компе, без утечек в инет)

Теги:
Всего голосов 3: ↑3 и ↓0+5
Комментарии13

Фронтенд для души, бэкенд для людей!

Мастер по разводу холивар
Мастер по разводу холивар

Были приняты меры погрузиться под воду дабы показать серьезность моих намерений в данной щепетильной теме.

Фронтенд весь такой разносторонний, креативный, местами легкий, местами настолько сложный что ломаешь голову. Напрашивается клеймо "для любителей".

Бэкенд наоборот поддерживает порядок и структурность. Меньше экспериментов и больше проверенных решений, самое то для "сделал работу - пошел спокойно домой".

Теги:
Всего голосов 5: ↑3 и ↓2+3
Комментарии2

Вышел lazy-tmux 0.2.0!

Напомню в двух словах: lazy-tmux — менеджер tmux-сессий на Go, который показывает все сохранённые сессии деревом, но реально восстанавливает сессию с её процессами и скроллбэком только когда вы её открываете, а не поднимает всё разом. Подробнее про сам проект я уже писал раньше, а сейчас — про новый релиз, в котором накопилось много всего.

Настройки наконец переехали в TOML-конфиг. Раньше приходилось прокидывать флаги каждый раз, теперь есть файл: config gen создаёт болванку, config show печатает итоговую конфигурацию с учётом всех источников. Заодно появился контроль над тем, что вообще перезапускается при восстановлении сессии — белый и чёрный списки, причём оба матчатся как регулярки по всей командной строке.

Сильно переработал сам TUI picker: нормальная тема, поддержка мыши, цветные режимы действий, панель хоткеев по ?, относительное время снапшота. Пока сессия поднимается, прямо внутри picker’а теперь рисуется анимация загрузки, а Esc аккуратно отменяет восстановление и убивает частично поднятую сессию.

Ещё в релизе появился слой интеграций со сторонними программами, и первая из них — Claude Code. Рядом с каждой сессией в picker’е показывается живой статус: работает, ждёт вашего ответа или подтверждения, либо просто простаивает. Когда крутишь несколько агентов по разным проектам, удобно видеть, кто из них заблокирован, не переключаясь внутрь каждого. А восстановленные окна Claude сами переподхватывают свою сессию.

Из остального: проверил совместимость с tmux от 2.9 до 3.7b, починил поведение когда сервер tmux вообще не запущен, добавил фоновый демон автосейва, команду version и обновил сайт документации.

Поставить можно одной строкой:

curl -fsSL https://lazy-tmux.xyz/install.sh | sh

Есть и Homebrew с AUR. Код — https://github.com/alchemmist/lazy-tmux, документация — https://lazy-tmux.xyz. Проект ещё молодой, открытых задач хватает, так что буду рад фидбэку и контрибьюшенам!

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Вышел Echo 5.3

Echo - высокопроизводительный, расширяемый, минималистичный веб-фреймворк на Golang.

Echo построен на основе net/http и работает с ним через echo.WrapHandler / echo.WrapMiddleware, добавляя компоненты, которые стандартная библиотека оставляет разработчику: быстрый маршрутизатор на основе дерева решений, привязка запросов (с подключаемым валидатором), развитую экосистему middleware и централизованную обработку ошибок.

Ключевые новинки версии 5.3:

  • Добавлена ​​полноценная поддержка метода HTTP QUERY в соот с RFC 10008

  • Маршрутизатор: автоматическая обработка HEAD-запросов обработчиками GET

  • Изменение логики группировки middleware

GitHub: https://github.com/labstack/echo

ChangeLog: https://github.com/labstack/echo/releases/tag/v5.3.0

Теги:
Всего голосов 1: ↑1 и ↓0+3
Комментарии0

Представлен открытый проект на Go под названием Castor. Умные ТВ не могут транслировать произвольное веб-видео, а зеркальное отображение экрана тормозит и теряет разрешение. Вместо этого Castor транслирует реальный поток в полном качестве с ПК на ТВ.

«Я создал Castor, потому что не мог транслировать веб‑видео со своего ноутбука на телевизор: не было Chromecast, не было AirPlay. Наведите его на любую веб‑страницу, и Castor найдет видео, извлечет поток, перекодирует его для вашего телевизора и транслирует в реальном времени. Он также принимает прямой URL‑адрес потока или идентификатор IMDB/TMDB и может встраивать автоматически сгенерированные субтитры», — пояснил автор проекта.

Castor запускает Chrome в headless режиме с рандомизированным фингерпринтом и скрытыми скриптами для маскировки автоматизации. Решение отслеживает весь сетевой трафик через протокол Chrome DevTools для захвата видеопотока, а затем запускает короткий конвейер действий: кликнуть по странице, перейти в самый большой iframe, решить проблему с Cloudflare Turnstile, если таковая появится, и снова кликнуть в качестве резервного варианта.

Теги:
Всего голосов 6: ↑6 и ↓0+9
Комментарии0

Обещанная статья про yggvault

Эта статья должна была выйти на Хабре ещё две недели назад. Но спасибо администрации Хабра за безвовзратное удаление самописной статьи: освободившееся время я потратил на финальное доведение проекта до ума. Исправил мелкие баги, улучшил документацию и так далее.

Правда, связываться с Хабром после этого желания больше нет. Поэтому полноценное описание проекта опубликовано на Hackaday, а этот короткий пост — просто выполнение обещания опубликовать статью (в прошлом месяце, ага).

---

Что такое yggvault

yggvault — самостоятельное зеркало релизов и зависимостей, упакованное в один бинарный файл.

Оно забирает выбранные версии проектов с GitHub, GitLab, Bitbucket, Gitea или другого узла yggvault, проверяет их, сохраняет локально и публикует сразу в нескольких форматах.

Один процесс предоставляет:

  • совместимые с GOPROXY маршруты для Go-модулей;

  • репозиторий Composer v2;

  • исходные архивы .zip и .tar.gz;

  • JSON API и OpenAPI;

  • Atom-ленты обновлений;

  • веб-интерфейс с каталогом, версиями, хешами, командами установки и ссылками на архивы.

Вся фишка в том что внешняя база данных, JVM и тд не нужны. Данные хранятся локально, а уже загруженные версии продолжают раздаваться, даже если исходный forge временно недоступен, заблокирован или упёрся в rate limit.

Зеркало можно поднять локально, на VPS или в домашней сети. Дополнительно yggvault умеет работать внутри сети Yggdrasil — без публичного IP, DNS, проброса портов, root-доступа и отдельного системного демона. (Еще одна причина для статьи — популяризация Yggdrasil)

Несколько узлов могут использовать друг друга как доверенные «братские» зеркала и синхронизировать релизы через обычный Web или Yggdrasil.

Проект не пытается быть полным реестром всех пакетов или прозрачным прокси для всего Go. Его задача проще: надёжно хранить и раздавать выбранные зависимости через контролируемую вами точку.

Репозиторий:
https://github.com/voluminor/yggvault

Работающее публичное зеркало:
https://www.ratatoskr.space/pkg/

Полная статья и технические заметки:
https://hackaday.io/project/206175-yggvault-mirror-your-dependencies-in-one-binary

Теги:
Всего голосов 8: ↑7 и ↓1+8
Комментарии0