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

Go *

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

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

От и Go: доклады для гоферов про инструменты для фаззинга, kuber-кластер на Go и не только

Время на прочтение3 мин
Количество просмотров335

Бывает, перед инженерами встает выбор: использовать существующее open source-решение задачи или написать свое. И часто, изучив все возможные опции, разработчики предпочитают второй вариант.

Большинство докладов в нашей подборке — инструкции по созданию кастомных решений, которые инженеры и разработчики из YADRO, Avito Tech, Ozon Fintech и других технологических компаний уже опробовали в собственных продуктах. Если вашей команде не хватает инструмента для фаззинга или обработки ошибок на Go — можете сделать их по примерам, которые представили инженеры в выступлениях и презентациях.

Зайти в Go-портал
Всего голосов 4: ↑4 и ↓0+5
Комментарии0

Новости

Vo(IP) Really Simple: пишем простое VoIP решение

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров1.5K

Будучи поклонником suckless философии, минимализма и простоты в программном обеспечении, я не нахожу простых и маленьких VoIP решений. Программ связанных с VoIP очень много. Но это либо колоссальные системы для построения SIP-based экосистемы, либо что-то из мира WebRTC. Особняком выделяю Mumble -- популярное решение среди геймеров: централизованный сервер, указываешь его адрес и вот уже слышишь в наушниках другого человека. А нет ли чего ещё попроще?

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

Как я бэкенд для интернет-магазина пилил…

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров11K

Поделюсь как начал писать приложение для интернет-магазина на монолите, затем перешёл на микросервисы.

Читать далее
Всего голосов 11: ↑11 и ↓0+12
Комментарии19

Популярные ошибки в Golang и как их избежать

Уровень сложностиПростой
Время на прочтение15 мин
Количество просмотров4.2K

Дмитрием Королевым расскажет про распространённые ошибки при работе со слайсами, каналами и другими структурами в Go. Научимся предупреждать их и справлять на примерах.

Читать далее
Всего голосов 19: ↑19 и ↓0+22
Комментарии4

Истории

Асинхронный веб: WebSocket, Server-Sent Events, Long Polling и Short Polling

Уровень сложностиСредний
Время на прочтение13 мин
Количество просмотров6.3K

Веб-разработка часто требует реализации механизмов обновления контента на странице в реальном времени. Существуют различные сценарии, где это необходимо, например, отображение прогресса выполнения тяжелых задач на бекенде, обновление каких-либо часто меняющихся данных, будь то курсы валют или мониторинг какой-то активности, чаты, различные уведомления. Эти сценарии объединяет одна общая особенность: источник события необходимости обновления данных находится не на клиентской стороне, поэтому мы хотим получать события с бекенда. В данной статье мы рассмотрим четыре популярных подхода к реализации этой функциональности: WebSocket, Server-Sent Events (SSE), Long Polling и Short Polling.
Мы проанализируем каждый метод, выявим их плюсы, минусы и сложность реализации.

Читать далее
Всего голосов 15: ↑13 и ↓2+16
Комментарии11

Генерация надёжных псевдослучайных чисел с ChaCha8Rand в Go

Время на прочтение4 мин
Количество просмотров1K

В версии Go 1.22 пакет math/rand/v2претерпел значительные изменения, а в частности - переход на ChaCha8Rand. Этот новый генератор представляет собой модификацию широко известного и проверенного временем шифра ChaCha8, который используется в протоколах TLS и SSH.

Читать далее
Всего голосов 10: ↑9 и ↓1+12
Комментарии7

Динамическая функция для генерации excel файла на Golang

Уровень сложностиСредний
Время на прочтение7 мин
Количество просмотров2.3K

Привет! В данной статье рассматривается проблема генерации excel файла и возможности реализовать динамическую генерацию excel файла с использованием интерфейса.

Читать далее
Всего голосов 9: ↑7 и ↓2+5
Комментарии3

database/sql: плохой, хороший, злой

Уровень сложностиСредний
Время на прочтение20 мин
Количество просмотров6.7K

Многие Golang-разработчики  пробовали работать с БД в Go, и у каждого — свои боли. В этой статье разберём библиотеку database/sql как безотносительно конкретной СУБД, так и применительно к YDB. Рассмотрим трудности эксплуатации при использовании драйвера database/sql на проде. А также рассмотрим, что мы делали для решения проблем.

Меня зовут Алексей Мясников, я — руководитель Application Team в команде разработки YDB. Я очень люблю git blame за то, что с его помощью можно проследить, как развивалась инженерная мысль с течением времени и немножко побыть в шкуре разработчика той или иной классной штуки. В статье я расскажу, как реализовать драйвер database/sql для распределённой базы данных, какие проблемы при этом придётся преодолеть и как менялся подход с выходом новых версий Go. 

Читать далее
Всего голосов 35: ↑35 и ↓0+40
Комментарии2

Библиотека GopherJS в Golang

Время на прочтение5 мин
Количество просмотров3.5K

GopherJS позволяет переводить Go-код в JavaScript — он предоставляет полноценную совместимость с большинством пакетов стандартной библиотеки Go. Также Gopher поддерживает горутины и каналы!

В статье в общих деталях рассмотрим эту замечательную библиотеку.

Читать далее
Всего голосов 13: ↑6 и ↓7+3
Комментарии6

Суслик и пингвин: кодим на Go под Linux

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров8.2K

Язык ядра Linux, его модулей и утилит написаны на языке C. Хоть он и является старым языком и прародителем многих других, но его до сих пор используют. В экосистему линукса постепенно проникают и более молодые языки — например, Rust. Но сегодня мы поговорим об детище Google — GoLang. Я много пишу про этот замечательный язык и в этой статье предлагаю изучить основы системного программирования на Go, мы изучим как работать с ядром, юзерспейсом линукса. Расскажу об стандарте POSIX, а также узнаем, как сочетать C и Go-код.

Читать дальше →
Всего голосов 21: ↑14 и ↓7+8
Комментарии15

Коробки — российский аналог Docker

Время на прочтение4 мин
Количество просмотров51K

Хочу представить вам новую технологию, которую создали русские программисты — «Коробка». Основную роль в её разработке сыграл Александр Коробкин и его команда. Для нас она интересна тем, что в некотором роде является российской альтернативой Docker. В ней они объединили доступные инновационные возможности с национальными спецификами.

Читать далее
Всего голосов 121: ↑21 и ↓100-77
Комментарии91

Обработка ошибок в web apps не должна быть такой сложной

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров3.4K

В процессе работы с Go я столкнулся с ещё одной проблемой — обработкой ошибок в хендлерах. Как можно сделать этот процесс удобным и эффективным для 150+ обработчиков? Как обеспечить консистентность и поддержку при обработке ошибок?

Разумеется, мои поиски палочки-выручалочки закончились ничем, хочется чтобы бум и все готово. Есть протокол RFS7807, есть библиотека, есть масса противоречивых статей. По существу статья ниже полностью не отвечает на все, но в ней есть позиция и предложено решение, и я думаю, это решение может быть полезным. Статья лишь повод/предложение поделиться вашими примерами успешных кейсов.

Собственно, статья, приятного прочтения.

Читать далее
Всего голосов 10: ↑9 и ↓1+13
Комментарии0

Паттерн Identity Map в Golang

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров4.2K

Привет, Хабр!

Identity Map — это паттерн проектирования, предназначенный для управления доступом к объектам, которые загружаются из базы данных. Основная его задача — обеспечить, чтобы каждый объект был загружен только один раз, что предотвращает излишние запросы к базе данных и повышает производительность приложения.

Identity Map можно реализовать в Golang и с помощью него можно управлять объектами более эффективней, сокращая задержки и нагрузку на сервера БД.

Читать далее
Всего голосов 17: ↑7 и ↓10+1
Комментарии5

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

Антиконференция X5 Future Night
Дата30 мая
Время11:00 – 23:00
Место
Онлайн
OTUS CONF: GameDev
Дата30 мая
Время19:00 – 20:30
Место
Онлайн
Конференция «IT IS CONF 2024»
Дата20 июня
Время09:00 – 19:00
Место
Екатеринбург
Summer Merge
Дата28 – 30 июня
Время11:00
Место
Ульяновская область

Дайджест полезных материалов из мира Golang за неделю (21.04.24 -28.04.24)

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров2K

Подборка полезных материалов и находок из мира Go за неделю.

🛠 Инструменты недели: 

 • go-size-analyzer - инструмент для анализа размера зависимостей в скомпилированных бинарных файлах 

Go.

 • Go-mongox - пакет Go Mongo, поддерживающий операции по работе с документами и эффективным компоновщиком данных BSON с использованием различных типов данных.

 • Dendy - это эмулятор NES/Famicom, написанный на Go и названный в честь советского клона Famicom, который был у многих в детстве.

Аутентификация и OAuth с помощью Go - большой список полезных библиотеки для реализации схем аутентификации

 •The Gowebly CLI  - инструмент интерфейса командной строки, который упрощает создание Go приложений на серверной части.

📚 Что почитать:

Fuzzing-тестирование. Практическое применение

Бойлерплейт как инструмент стандартизации Go-проектов

Как добавить метаданные в изображение?

Пишем поиск семантически похожих текстов (или товаров) за полчаса на Go и Postgres (pgVector)

—  Шаблон backend сервера на Go

Использование миграций баз данных в Go

My weekly dev.to recommendations

—  What’s New in Go 1.22: cmp.Or

Golang in-memory key-value pair cache

Golang generator functions (Experimental in 1.22)

From Homemade HTTP Router to New ServeMux

(Part 5)Golang Framework Hands-on - KisFlow Stream Computing Framework-Function Scheduling

Go Program pattern 04:Map-Reduce

Live reload em Go com docker e compile daemon

Go program pattern 05 : Decorations

Смотреть
Всего голосов 11: ↑8 и ↓3+6
Комментарии0

Применение чистой архитектуры в Go

Уровень сложностиСложный
Время на прочтение13 мин
Количество просмотров11K


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

На старте проекта приходится принимать множество решений. Большинство инженеров при этом рассматривают область применения проекта и решают, при помощи каких инструментов он будет реализовываться. Речь, в частности, о языках программирования, фреймворках, базах данных, внешних API, вариантах развёртывания. Принимая такие решения на самых ранних этапах, они замыкаются на этих инструментах, пронизывают ими всю базу кода, в результате чего её становится сложно менять и поддерживать.

Большинство этих инструментов – это частности, и выбор большинства из них (кроме языка программирования) можно на некоторое время отложить, пока проект не окрепнет. Поэтому на ранних этапах разработки проекта стоит уделить внимание не тому, при помощи каких инструментов пойдёт реализация. Лучше смоделировать предметную область проекта, а к вышеупомянутым инструментам подходить так, как следует — то есть, как к частностям. Разумеется, чтобы проект был реализован, с такими деталями тоже нужно определиться, но они могут оставаться в некоторой отдельной части кода, не относящейся к предметной области — там, где их будет легко менять, удалять или заменять по нашему усмотрению.

Для решения именно таких проблем с сильной связностью кода многоопытные инженеры создали ряд архитектурных паттернов. Таковы, в частности, чистая архитектура Роберта Мартина («дядюшки Боба»), гексагональная архитектура Алистера Кокбёрна и явная архитектура Герберто Грацы.
Читать дальше →
Всего голосов 23: ↑21 и ↓2+30
Комментарии5

Остаться в живых (keepalive) feat. HTTP/2, Go & gRPC-Go

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров5.6K

Привет, Хабр!) Меня зовут Ильяс. В этой статье мы разберём известную идею — keepalive в межсервисном взаимодействии, которая спасла уже не одну компанию в трудное время :). Но чтобы добавить интереса, мы разберём, какие проблемы в keepalive принесли современные технологии (ведь что может пойти не так с этой простой идеей?). Поэтому в статье мы рассмотрим механизмы, которые позволяют проверять стабильность соединения между клиентом и сервером в случае, когда обычные TCP keepalive из-за сложности архитектуры не могут определить состояние сервера.

Остаться в живых
Всего голосов 131: ↑127 и ↓4+128
Комментарии0

Fuzzing-тестирование. Практическое применение

Уровень сложностиСредний
Время на прочтение11 мин
Количество просмотров4K

Привет, Хабр! Меня зовут Никита Догаев, я Backend Team Lead в команде Контента на портале поставщиков Wildberries. Мы отвечаем за карточки, которые каждый день испытывают на прочность сотни тысяч продавцов из разных стран.

В статье поделюсь своим опытом применения фаззинга для нагрузочных и интеграционных тестирований. Расскажу про генерацию текстов на армянском языке, тестирование SQL-запросов, а также можно ли использовать фаззер и unit-тестирование бок о бок, и какие баги нам удалось найти.

Читать дальше →
Всего голосов 16: ↑16 и ↓0+18
Комментарии3

Бойлерплейт как инструмент стандартизации Go-проектов

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров2.3K

Трудности в процессе разработки на Go — частая история. Чтобы их преодолеть, нам даже пришлось писать собственный бойлерплейт. Хотя казалось бы — всё уже есть, но нет, нам понадобилось имплементировать собственную хардкорную штуку. Расскажем, почему и зачем.

Читать далее
Всего голосов 9: ↑6 и ↓3+6
Комментарии3

Пишем поиск семантически похожих текстов (или товаров) за полчаса на Go и Postgres (pgVector)

Время на прочтение5 мин
Количество просмотров6.7K


Казалось бы, в посгресе и так есть неплохой полнотекстовый поиск (tsvector/tsquery), и вы из коробки можете проиндексировать ваши тексты, а потом поискать по ним. Но на самом деле это не совсем то, что нужно — такой поиск работает лишь по чётким совпадениям слов. Т.е. postgres не догадается, что "кошка гонится за мышью" — это довольно близко к "котёнок охотится на грызуна". Как же победить такую проблему?


TLDR:


  1. Преобразовываем наши тексты в наборы чисел (векторы) при помощи API openAI.
  2. Сохраняем векторы в базе с помощью pgvector.
  3. Легко ищем близкие друг к другу векторы или ищем их по вектору-запросу.
  4. Ускоряем индексами.
Читать дальше →
Всего голосов 21: ↑21 и ↓0+24
Комментарии8

Использование миграций баз данных в Go

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров4.6K

Недавно мы столкнулись с необходимостью найти библиотеку для удобной работы с базами данных. В проекте было принято решение не использовать ORM, а вместо этого применить миграции. Так как я работал только с ORM, мне, как и автору статьи, было мало знакомо понятие миграций баз данных. В поисках информации о миграциях и популярных решениях, я наткнулся на эту статью. Перевод статьи я оставил ниже. Возможно, она будет вам полезна. Буду признателен, если вы сможете поделиться библиотеками, которые используете.

Читать далее
Всего голосов 9: ↑4 и ↓5+1
Комментарии16
1
23 ...

Вклад авторов

Работа

Go разработчик
125 вакансий