Как стать автором
Обновить
350.42

Go *

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

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

Leaquor.jl: Secret Scanning with Julia

Доверяем, но проверяем

Если делать веб-приложение вроде SonarQube, то не мешало бы разделить образности на бэкенде:

  1. Выделить сканер секретов в одтельную программу на Go. Это worker.

  2. Сервис FastAPI предоставляет JSON API, клонирует репозиторий Git и возвращает результаты сканирования для фронтенда в JSON. Это сервис.

  3. На бэк отправляется запрос REST API, который передает URL репозитория для сканирования:

curl -X POST "http://I<IPADDRESS>:8000/scan-secrets" -H "Content-Type: application/json" -d '{"repo_url": "https://github.com/Plazmaz/leaky-repo"}' | jq .
Skanner
Skanner

К чему это я все? DevOps инструментарий – это полный шлак. На попытку заставить на бэке работать эту чудо-поделку под названием GitLeaks, ушло больше времени чем на то, чтобы переписать ее с нуля, добавив еще и возможность кастомизировать паттерны для проверки.

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

В середине XX века социолог Никлас Луман разработал метод организации информации Цеттелькастен (Zettelkasten). Он создавал множество заметок и, чтобы не терять знания, начал вести картотеку. Система нумерации и ссылок помогала ориентироваться в карточках. У каждой заметки был уникальный номер, отражающий тему и дополнения.

Спустя полвека идеи Лумана остаются актуальными. Более того, появились программные обеспечения для ведения базы знаний. Заметки сохраняются в облаке и отображаются в виде графа.

Все заметки Дмитрия в виде графа
Все заметки Дмитрия в виде графа

Веб-разработчик в YADRO Дмитрий сохраняет заметки в сервисе Obsidian. Дмитрий услышал о ПО от инженера и блогера Николая Тузова и понял, что система, похожая на картотеку, ему близка.

Программа оказалась понятной, легко адаптируемой под разные задачи. Когда Дмитрий перенес данные из Notion в Obsidian, образовалось несколько графов: по Go, хешированию и базам данных. В этой базе знаний все концепции в Go пересеклись в двух точках — интерфейсе и горутинах. Есть еще слайсы, но в основном все «лучи» сходятся именно в эти две точки. 

Как Дмитрию удалось упорядочить большие объемы знаний и кому он рекомендует Цеттелькастен, читайте в статье →

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

Новый запуск Route 256 эксклюзивно для Go-разработчиков.

Это бесплатные курсы от экспертов Ozon Tech.
2 месяца онлайн-занятий.
Реальные задачи бигтеха.

Чтобы попасть на Route 256, нужно пройти отборочный контест. Он состоится 20 апреля.

Зачем это вам?

  • получить передовые знания от IT-команды ведущего e-com;

  • попробовать работу в бигтехе;

  • пополнить портфолио крутыми проектами для миллионов пользователей;

  • получить оффер в команду Ozon Tech.

Почему именно Go?
У Ozon высоконагруженная и отказоустойчивая микросервисная инфраструктура. Сервисы выдерживают до 382 000 RPS к бэкенду с мобильных приложений и сайта — и это не стресс-тесты. Команде нужны сильные Go-разработчики, чтобы развивать и масштабировать маркетплейс.

🎓Если вы ещё учитесь в вузе, но уже имеете небольшой опыт программирования и понимаете, как устроены алгоритмы и базы данных, регистрируйтесь на уровень junior: https://s.ozon.ru/3lip8Ey

💻Если вы уже имеете опыт коммерческой разработки (на любом языке кроме низкоуровневых, 1С и low-code), регистрируйтесь на уровень middle: https://s.ozon.ru/Q1vHnSc

Переходите по ссылкам, чтобы узнать все детали и отправить заявку на отборочный тур.
Удачи!

Теги:
+4
Комментарии1
Ai periodic table
Ai periodic table

В Go есть очень полезная фишка – go:embed, это поддержка встраивания файлов и папок в исполняемый файл приложения во время компиляции без использования внешних инструментов.

С помощью этой функции вы можете встроить все ресурсы, необходимые для работы веб-приложения, в один бинарный файл.

Сборочный процесс упростится, поскольку этап встраивания, не требует использования каких-либо дополнительных инструментов для включения всех статических файлов в исполняемый файл.

В качестве примера, простое приложение/каталог AI моделей, которое читает JSON файл со списком моделей.

https://github.com/avkcode/AwesomeAI

//go:embed LICENSE README.md favicon.svg index.html models.json
var content embed.FS

То есть можно фронт и бэк встраивать в один исполняемый файл. Мы не ограничены в выборе файлов – это может и база данных SQLite или TLS сертификаты. Для некоторых use-кейсов это может изрядно упростить работу.

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

А почему нет нормального дженерика для мап? 👀

У кого-то спина белая, а мы собрали бинго из боли, кринжа и немного гордости каждого гошника. Наши ребята из Go-сообщества отобрали самый сок!

Пишите в комментариях, что прожито на личном опыте. Есть чем дополнить? Смело предлагайте 😉

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

Конкурентность в Go: просто запустить — сложнее управлять

Go предлагает удобный механизм конкурентности, позволяющий запускать задачи максимально просто — достаточно добавить go перед вызовом функции, и она начнет выполняться параллельно с основным потоком. Однако для эффективного использования такого кода важно правильно управлять синхронизацией: собирать результаты, обрабатывать ошибки и учитывать возможные сценарии выполнения. На практике этому аспекту часто уделяют недостаточно внимания.

Полезные материалы о конкурентности в Go можно найти в блоге Дейва Чени. Он рассматривает различные решения в Go, объясняя их происхождение и способы использования. В своих статьях он также подробно разбирает тему конкурентности.

Например, в статье Curious Channels Дейв Чени описывает два важных свойства каналов в Go:

  1. Закрытый канал не блокируется. После закрытия в него нельзя отправлять данные, но можно читать. Если данных нет, возвращается нулевое значение. Это удобно при использовании range, который автоматически завершает цикл.

  2. Закрытие канала уведомляет все горутины. Вместо того чтобы отправлять сигнал каждой горутине, достаточно закрыть канал — все ожидающие горутины получат сигнал завершения.

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

Владислав Белогрудов, эксперт по разработке ПО в YADRO, собрал полезные материалы про конкурентность в Go. В статье — блоги, выступления и книги, которые помогут разобраться, как в Go работать с горутинами и каналами без хаоса и дедлоков.

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

Как не надо использовать Assert, если реализуете подход Design by Contract

Использовать Assert вместо if err != nil { return err}

Одно из неправильных применений Assert — это замена им проверки, которая действительно должна быть и на которую нужно реализовать реакцию в коде.

Выполнять вычисления при вызове Assert

Еще одна распространенная и трудно выявляемая ошибка — это выполнение вычислений и присваивание значений переменным прямо при вызове Assert, которые могут быть упразднены при оптимизации кода компилятором:

  •  e.g. Assert(i++ > 0, “осторожно, не факт, что в релизе i увеличится”),

  •  Assert(call_to_f1(), “осторожно, не факт, что call_to_f1() будет вызвана в релизе”).

Удалять Assert, несмотря на то, что это часть описания контракта

Непонимание, что Assert — это реализация контракта, может привести к тому, что разработчик, незнакомый с DbC, захочет просто удалить проверку. Однако нужно всегда помнить, что срабатывание Assert говорит о нарушении контракта одной из сторон. То есть, если срабатывает Assert, надо прежде всего найти баг и пофиксить. А уж если контракт действительно должен быть изменен, Assert подскажет, где находятся участки кода, на которые нужно обратить внимание.

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

В реализации пакета Go 1.23 fmt-функция Printf всегда возвращает err = nil. И практически все игнорируют возвращающееся значение ошибки, тогда как могли бы проверять постусловие assertion.Assert (err == nil). Так, рано или поздно в последующих версиях можно научить код реагировать на err, отличный от nil.

Как правильно применять assertions, если реализуете подход Design by Contract для улучшения производительности кода в продакшене? Читайте в статье →

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

Приглашаем на первый Cloud․ru Tech Lab: Golang — митап для Go-разработчиков и технических лидеров 🎙️

📅 Дата: 13 марта, 19:00
📍 Место: Москва, Большая Почтовая улица, 40с7, Гоэлро Лофт

В программе четыре доклада от разработчиков Cloud․ru и приглашенного гостя. А еще — нетворкинг и afterparty с диджеем, музыкой и ужином.

Темы докладов:

  • Как устроена Go-разработка в Cloud․ru — Александр Шакмаев и Андрей Рацеров, технические лидеры;

  • Балансировка gRPC в Kubernetes — Михаил Абраш, старший Go-разработчик;

  • Как мы бутстрапим пользовательское окружение с Go, Temporal и Kubernetes — Евгений Третьяков, ведущий Go-разработчик;

  • Осторожно unsafe! Практические примеры и ошибки использования — Владимир Балун, основатель balun․courses.

👉 Зарегистрироваться

А еще заглядывайте в наши статьи и делитесь размышлениями в комментариях:

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

Возвращаясь к заметке «Время собирать ядро» – возникает вопрос «как это мониторить?». Традиционные системы мониторинга типа Zabbix или Prometheus слишком громоздки для легковесных ВМок, которые должны подниматься и тушится меньше чем за секунду.
Можно, просто написать своего агента, который будет запускаться вместе с ВМ и парсить /proc/vmstat и /proc//(cmdline|stat|io):

Usage of /tmp/go-build1413422386/b001/exe/procmon:
  -P	Display output in a pretty table format (shorthand for -pretty)
  -filter string
    	Filter processes by label (e.g., 'wal writer')
  -http string
    	Serve process information over HTTP on the specified port (e.g., ':8080')
  -interval int
    	Polling interval in seconds (default 1)
  -output string
    	Output file (default: stdout)
  -pretty
    	Display output in a pretty table format (use -P as shorthand)

Добавляем опцию html и можно раздавать поток с метриками в csv. Метрики достаточно заскрейпить с помощью victoriametrics или prometheus. С помощью filter можно на стороне агента ограничить сбор метрик для какого конкретного сервиса, например PG. Получается облегченная версия node экспортера prometheus. Микроэкспортер для микроВМ.

go run procmon.go -P -http :8080
2025-02-24T18:36:35Z,21416,8536,sshd: [accepted]  ,1122,45,0,0,0
2025-02-24T18:36:35Z,21446,21396,go run procmon.go -P -http :8080 ,256516044,135107883,25313280,143409152,139264
2025-02-24T18:36:35Z,220,2,,0,0,0,0,0
2025-02-24T18:36:35Z,222,2,,252394,0,507904,0,0
2025-02-24T18:36:35Z,22968,21446,/tmp/go-build513569549/b001/exe/procmon -P -http :8080 ,36669,56998,0,0,0
2025-02-24T18:36:35Z,23,2,,0,0,0,0,0
Technology
Technology
Теги:
Всего голосов 2: ↑1 и ↓10
Комментарии0

Почему Go — выбор крупных IT-компаний? Узнайте в нашем новом подкасте 🎧

В нем Владимир Балун, основатель Балун.Курсы, пообщался с командой Cloud.ru про тренды в программировании, опыт перехода на Go и подготовку к алгоритмическим собеседованиям.

А еще:

  • как глобальные изменения в отрасли влияют на требования к разработчикам;

  • почему Go стал одним из основных языков для веб-разработки и высоконагруженных приложений;

  • как AI и автоматизация формируют будущее простых задач, таких как верстка.

👉 Посмотреть подкаст также можно на YouTube.

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

Все топовые фичи нового релиза Go

Случился релиз новой версии языка Go: 1.24. Разбираем основные нововведения и используем улучшенные инструменты по максимуму.

В новом выпуске avito.code Павел Агалецкий, техлид и бэкенд-разработчик Авито, рассказывает о самых топовых фичах, а также делится их особенностями, благодаря которым писать код станет еще проще.

Смотреть выпуск на YouTube
Смотреть выпуск в VK

Подписывайтесь на канал AvitoTech в Telegram, там мы рассказываем больше о профессиональном опыте наших инженеров, проектах и работе в Авито, а также анонсируем митапы и статьи.

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

Нам нужно больше capacity: как растет вместимость в слайсах на Go

Чтобы выяснить, во сколько раз Go увеличивает внутренний массив элементов в слайсах, проведем небольшой тест. Добавим один элемент к уже заполненным слайсам:

На графике видно, что в районе 200 элементов увеличенный слайс вмещает уже 400 элементов, а в районе 800 — 1200, то есть вместимость выросла сначала в два раза, потом — в полтора. 

В коде рантайма можно найти простую формулу: если в слайсе capacity элементов было меньше 256, то вместимость увеличится в два раза. Если больше 256, то на четверть. Таким образом мы пытаемся экономить память.

Существует забавная константа для вычисления вместимости: три четвертых от 256. Разработчики на Go посчитали, что так происходит более плавный переход от фактора 2x к фактору 1.25

Почему на графике образовались «ступеньки» вместо привычной кривой и что еще нужно знать о слайсах Go-разработчику — читайте в статье →

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

Что написать на Go, если «вывод суммы на экран» вы уже переросли

You look lonely... I can fix that.
You look lonely... I can fix that.

На этот вопрос нашел ответ Игорь Горбунов. Он разрабатывает платформу базовой станции в YADRO и второй год изучает Go. Когда стандартные задачи ему надоели, он придумал челлендж: построить приложение, похожее на утилиту ping в UNIX-подобных системах.

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

  • Возможность запросов Echo-Request по протоколам ICMP и ICMPv6 и поддержка IPv4 и IPv6 со стороны ping.

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

  • Возможность менять из командной строки размер отправляемых запросов и их количество.

  • Подсчет и вывод в консоль статистики отправленных запросов, полученных и неполученных ответов, ошибок, минимального, среднего, максимального времени круговой задержки (rtt), а также стандартного отклонения rtt.

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

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

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

Google выпустила новое API для Protocol Buffers в Go

Команда Go представила новое API для работы с Protocol Buffers, получившее название Opaque API. Это важное обновление, которое должно сделать работу с protobuf более эффективной и безопасной. 

До сих пор в Go использовалось так называемое Open Struct API, где все поля структур были доступны напрямую. Например, так:

type LogEntry struct {
  BackendServer *string
  RequestSize   *uint32
  IPAddress     *string
}

С новым Opaque API все поля становятся приватными, а доступ к ним осуществляется через методы:

type LogEntry struct {
  xxx_hidden_BackendServer *string
  xxx_hidden_RequestSize   uint32
  xxx_hidden_IPAddress    *string
  // …внутренние поля опущены
}

// Доступ через методы
func (l *LogEntry) GetBackendServer() string
func (l *LogEntry) HasBackendServer() bool
func (l *LogEntry) SetBackendServer(string)
func (l *LogEntry) ClearBackendServer()
//...

Зачем это сделано?

Новый подход значительно экономит память. Вместо использования указателей для хранения информации о наличии значения в поле (presence), теперь используются битовые поля. В некоторых случаях это позволяет сократить количество аллокаций памяти почти на 60%. (речь идет про элементарные типы, такие как целые числа, булевы и т.д)

Появилась возможность реализовать ленивое декодирование сообщений. Теперь вложенные сообщения декодируются только при первом обращении к ним, а не при общей десериализации. Для некоторых приложений это дает колоссальный прирост производительности и уменьшает аллокации

Новое API предотвращает некоторые ошибки. Например, раньше было легко случайно сравнить указатели вместо значений при работе с enum:

/*
message LogEntry {
  enum DeviceType {
    DESKTOP = 0;
    MOBILE = 1;
    VR = 2;
  };
  DeviceType device_type = 1;
}
*/

// Неправильно и незаметно:
if cv.DeviceType == logpb.LogEntry_DESKTOP.Enum()

// Правильно:
if cv.GetDeviceType() == logpb.LogEntry_DESKTOP

С новым API такая ошибка просто невозможна, так как прямого доступа к полям нет.

Еще одно улучшение касается работы с reflection. Раньше разработчики могли случайно использовать стандартный пакет reflect вместо специального protobuf-reflection, что приводило к неожиданным результатам. Теперь такие ошибки исключены.

Google предлагает постепенный путь миграции через "гибридное" API, которое поддерживает оба способа работы. Для новых проектов рекомендуется сразу использовать Opaque API. В 2024 году оно станет стандартным подходом в новой версии Protocol Buffers (Edition 2024).

Старое API никуда не исчезнет – принцип обратной совместимости. 

Для перехода на новое API Google предоставляет инструмент open2opaque, который помогает автоматически переписывать код. Внутри самого Google большинство protobuf-файлов уже переведено на новое API, и оно активно используется на проде.

cross-пост из tg-канала Cross Join

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

Последний Go-митап в этом году: как Go меняет подходы к разработке и тестированию

Уже через несколько часов, в 19:00, начнется онлайн-трансляция финального в этом году Go-митапа, где разработчики и технические лидеры сообщества обсудят инструменты кодинга на Go. В мероприятии примут участие эксперты из YADRO, Wildberries, Weborama и Ви.Tech. Регистрируйтесь на онлайн-участие. 

Программа:

Приветственное слово: Руслан Барсуков, ведущий инженер по разработке ПО в YADRO, и Виталий Левченко, технический менеджер в Wildberries, расскажут о планах Go-сообщества в Нижнем Новгороде.

«Генерация стабов для тестирования микросервисов по gRPC»

Кирилл Шувалов, разработчик дивизиона Телеком в YADRO, покажет, как с помощью Protoc стандартизировать тесты, упрощая их написание и повышая читаемость.

«Стриминг данных из Snowflake в Couchbase»

Александр Ванюшкин, разработчик в Weborama, поделится опытом создания плагина для Redpanda/Connect для оперативной обработки данных.

«Сборка проектов на Go: от Make до Mise»

Даниил Подольский, эксперт по разработке ПО в YADRO и один из лидеров внутреннего Go-сообщества, расскажет о развитии инструментов сборки и выборе оптимальных решений.

«Почему мы пилим монолит без микросервисов»

Кирилл Кузин, старший golang-разработчик, Ви.Tech, объяснит, как команда поддерживает сложную архитектуру и избегает ошибок при распиле монолита.

Пришлем ссылку на онлайн-трансляцию после регистрации на сайте →

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

Чего не стоит делать в Go?

О типичных ошибках при разработке на Go рассказывает наш бэкенд-инженер и автор одноимённого канала Олег Козырев. Что в докладе: 

  • встраивание типов и устройство мапов; 

  • возможные протечки и кастомные ошибки;

  • разбор интерфейсов и грамотная обработка багов. 

И всё это — в компании одного очаровательного кота. 

Подписывайтесь на канал AvitoTech в Telegram, там мы рассказываем больше о профессиональном опыте наших инженеров, проектах и работе в Авито, а также анонсируем митапы и статьи.

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

Итоги облачного IT-турнира от Cloud.ru и Хабр🏆

18 ноября завершился наш облачный IT-турнир — интеллектуальное IT-соревнование для профи по направлениям DevOps, Go и кибербезопасность. 

Напомним, что участники соревнования должны были решить все задания за 50 минут и набрать как можно больше баллов. Турнирная таблица обновлялась в режиме реального времени — мы с интересом следили за тем, как IT-специалисты устанавливают новые рекорды. 

Свои навыки решили проверить 892 участника, а 537 из них стойко дошли до самого конца и выполнили все задания 🦾. В итоге в лидеры вырвались:

В лиге DevOps:

🥇1 место  — @evgeniy_fyodorov, 1437 очков. 

🥈2 место — @Kciod, 1290 очков. 

🥉3 место — @dimadragon, 1219 очков.

В лиге Go:

🥇1 место  — @smetanin, 2843 очков. 

🥈2 место — @melpnz, 2778 очков.

🥉3 место — @itas, 2745 очков.

В лиге кибербезопасности:

🥇1 место  — @T_Frost, 1868 очков. 

🥈2 место — @KiraCoder, 1814 очков.

🥉3 место — @georgybelyakov, 1787 очков.

Поздравляем! Они получат ачивку победителя и карьерную консультация от Марины Ломадзе — руководителя рекрутмента в Cloud․ru. Мы уже начали связываться с победителями, чтобы рассказать, как получить заслуженные призы😊.

А у всех хабраюзеров, которые верно решили более половины заданий турнира, появятся ачивки IT-Лиги в профиле на Хабре.

Хотите узнать правильные ответы на задания IT-турнира? Ставьте плюс в комментариях, а также указывайте номер или название задания. Если наберется много желающих, позже мы сделаем небольшой обзор с решениями.

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

Присоединяйтесь к облачному IT-турниру от Cloud.ru и Хабр🏆

Почти 400 IT-специалистов уже поучаствовали в соревновании для профи и проверили свои навыки по направлениям DevOps, Go и кибербезопасность на облачном IT-турнире. А вы готовы принять вызов?🦾

Что нужно для участия

  • до 18 ноября зарегистрируйтесь и выберите лигу: DevOps, Go или кибербезопасность;

  • решите как можно больше задач за 50 минут — чем больше правильных ответов, тем выше будет ваше место в рейтинге, который обновляется в режиме real-time.

Какие будут призы

  • если наберете 50% правильных ответов, получите ачивку IT-Лиги в профиле на Хабре;

  • если войдете в топ-3 в выбранной лиге, получите ачивку победителя и карьерную консультация от Марины Ломадзе — руководителя рекрутмента в Cloud․ru. На консультации сформируете план развития и получите советы, как выгодно презентовать свой опыт на интервью и вести диалог о повышении.

Хотите занять призовые места в рейтинге? Тогда участвуйте в IT-турнире, выигрывайте и забирайте призы🎁 

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

IT-турнир от Хабра и Cloud.ru: первые итоги

18 октября Хабр и Cloud.ru запустили хардовое соревнование для профи в IT. Уже 2 недели участники Облачного IT-турнира сражаются за вершину рейтинга по трём направлениям: DevOps, Go и кибербезопасность. 

Мы же внимательно следим за соревнованием и результатами, которые обновляются в режиме real-time. Ниже список юзеров Хабра, которые вошли в ТОП (по данным за 31 октября). Поздравляем!

Если вашего имени еще нет в турнирной таблице — скорее регистрируйтесь, выбирайте Лигу и покажите свои знания.

Мы подарим ачивки на Хабре тем, кто решит половину теста правильно. А топ-3 победителей по каждому направлению заберут победную ачивку и получат главный приз — индивидуальную карьерную консультацию. Там они сформируют планы развития и получат советы, как выгодно презентовать свой опыт на интервью и вести диалог о прибавке.

Наш турнир продлится до 18 ноября 2024 года. Рассчитываем, что гонка будет жаркой!

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

Я вот не понимаю, почему Го преподносится как  post-OOP язык, в то время как это явно пре-ООП язык, чисто императивный. Как Бейсик (который не Вижуал) или Паскаль.

И это явно не прогресс, а регресс в подходе к методологии.

Хотя, очевидно, он выигрывает у языков с управляемой средой, да. Управляемая среда (ВМ) требует слишком много ресурсов для старта и разогрева. А в микросервисах это вообще не нужно.

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