Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
325 - Telegram Web
Telegram Web
Миграции баз данных с Golang

Недавно я присоединился к новой команде и был поражен созданной у них инфраструктурой тестирования для успешной работы приложений. Для меня это было большой переменой: я не привык к такой манере «тестирования».

С тестированием уровня данных связаны миграции БД. С базами данных я работаю на протяжении всей своей карьеры инженера-разработчика и все же задался вопросом: «Что это за миграции БД?»

Рассмотрим применение миграций БД в службах, написанных на Golang.

https://blog.stackademic.com/using-database-migrations-with-golang-7f6736f580c8

👉 @golang_lib
Перед вами — книга-метод, книга-наставник, способная перевернуть мышление и помочь выработать осознанный подход к работе и жизни в целом путём высокоуровневого планирования.

В своей второй книге IT-архитектор, методолог, педагог Александр Бындю раскрывает наиболее эффективный на сегодняшний день метод стратегического планирования, получивший название «Карта гипотез». Карта учит, как достигать намеченной цели через гипотезы, и служит навигатором на этом пути. В основу книги легли годы практики, и с уверенностью можно сказать, что Карта гипотез позволяет создать стратегию достижения для самых амбициозных целей.

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

Ознакомиться с книгой
Обзор итераторов в Go

В Go 1.22 ожидается появление расширений оператора for-range как для функций типа int (range-over-int), так и для функций-итераторов (range-over-func). Кроме того, продолжается работа по достижению консенсуса насчет библиотеки итераторов и корутин.

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

https://medium.com/eureka-engineering/a-look-at-iterators-in-go-f8e86062937c

👉 @golang_lib
Простые highload паттерны на Go

Хочу поделиться некоторыми рекомендациями, которые часто на моем опыте помогали держать highload нагрузку не прибегая к хардкору. Примеры будут на Go. Эти подходы довольно хорошо известны, но как мне кажется они недооценены и многие этими подходами пренебрегают. Если вы впервые видите их, то рекомендую хотя бы попробовать реализовать в своих проектах и провести бенчмарки, возможно вы будете приятно удивлены. Этих подходов в 90% случаях мне хватало за глаза, когда требовалось быстро и кратно увеличить перфоманс приложения в короткие сроки. Ну и конечно же делитесь своим опытом к каким подходам для оптимизаций вы прибегаете в первую очередь, буду рад взять себе интересное на заметку

https://habr.com/ru/articles/682618/

👉 @golang_lib
Идеальное начало для вашего нового проекта Go

Легко создайте идеальный каркас приложения для вашего веб-приложения или API на Go, адаптированный к вашим потребностям и экономящий время.

https://autostrada.dev/

👉 @golang_lib
Building Go Executables: Build Tags

Используя теги сборки, вы можете создавать различные версии вашего Go-приложения из одного и того же исходного кода и легко переключаться между ними.

https://www.youtube.com/watch?v=vQ8GJDwBdos

👉 @golang_lib
Подборка web-фреймворков для Golang

Beego
Если нужен быстрый запуск API-интерфейсов REST, веб- и серверных приложений в Go, то лучшего варианта не найти. Golang-разработчики зачастую сравнивают Beego с Django в Python. Достоинство Beego — отсутствие необходимости установки сторонних производителей. Это, фактически, полноценный фреймворк Model-View-Controller, причём у него есть собственные библиотеки и встроенный инструмент Bee, который даёт возможность находить изменения кода.

https://github.com/beego/beego


Kit
Инструмент для работы с микросервисами в любом масштабе. Микросервисы часто требуют специализированной поддержки, которую Kit без проблем предоставляет.

https://github.com/go-kit/kit


Echo
Облегчённый, гибкий и расширяемый веб-фреймворк. Позволяет создавать надёжные и масштабируемые RESTful API, имеет встроенное промежуточное ПО и даёт возможность определять своё собственное.

https://github.com/labstack/echo


Fiber
Простой но мощный фреймворк, который был создан на базе Fasthttp — самого быстрого HTTP-движка для Go. Fiber разработали для ускорения работы с нулевым распределением памяти и возможностями производительности. Плюс ко всему, этот фреймворк ещё и компактен, он без проблем позволяет интегрировать сторонние библиотеки с Martini. Fiber обеспечивает необходимую масштабируемость при сокращении накладных расходов.

https://github.com/gofiber/fiber


Fasthttp
Fasthttp обеспечивает быстрый HTTP-сервер и клиент API. Он может обрабатывать более 100 000 запросов в секунду и свыше 1 млн одновременно открытых соединений. Фреймворк рассчитан на относительно низкое потребление памяти и обеспечивает простую поддержку обновления соединения через RequestCtx.Hijack.

https://github.com/valyala/fasthttp


Gorilla
Gorilla практически безупречно работает со всеми повторно используемыми элементами и компонентами HTTP-библиотеки. Её главные достоинства в том, что она предлагает модульность и масштабируемость в качестве основных функций. И проблемы «засорения» устаревшим функционалом в случае Gorilla нет — всё отлично спроектировано.

https://github.com/gorilla/


👉 @golang_lib
Подробно рассмотрим принцип работы и реализацию фильтра Блума

https://programmer.group/explain-the-principle-and-implementation-of-bloom-filter-in-detail.html

👉 @golang_lib
Мои собеседования (Golang developer)

Разработкой начал заниматься ещё со старшей школы, изучал C/C++ (очень пригодилось при написании скриптов в injection для ультимы онлайн). Профессионально начал работать разработчиком приблизительно с 2014, основной язык до 2020 года был C# с примесью C++. Сначала разрабатывал и поддерживал некоторые проекты в банковской сфере, потом резко поменял предметную область и ушёл писать софт для автоматизации работы одного строительного девелопера. На начальных этапах это было огромное легаси на C# от бывшего архитектора, решившего стать программистом, с кучей багов и неочевидных решений, пришлось много переписывать.

Со временем появились задачи, которые не были привязаны к языку и технологиям в принципе (изначально писал, по сути, плагины к CAD-приложениям), и я попробовал Golang, а вместе с ним и микросервисы, NoSQL, gRPC и прочие модные штуки. Побывал в шкуре админа-девопса, так как новые сервисы я запускал и поддерживал сам.

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

Почему вообще собеседовался? Во-первых, стало интересно - а как это, работать в большой компании разрабов? На последнем месте у меня было два разработчика, и я чуть-чуть попробовал себя в роли тимлида бэкендеров.

Во-вторых, как и у всех – деньги (двое детей, машина в кредит, вот это вот всё...).

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

В-четвёртых, на прошлом месте работы приходилось заниматься не только разработкой, но и настройкой деплоя, администрированием, ручным тестированием и прочей «обвязкой» программистской деятельности, это очень выматывает, если вы понимаете о чём я – хочешь развиваться как разработчик, но в итоге тратишь кучу времени на смежные области.

Скажу сразу, что во все компании, в которые я проходил собеседования и о которых далее пойдет речь, я шёл как middle или senior. На самом деле я опирался в основном на цифру в графе зарплаты. Из других вводных - ориентировался на хотя бы частичную удалёнку и зарплату в рынке, но в принципе если мне бы очень уж понравилось, готов был обсуждать на 10-20% меньше.

https://habr.com/ru/articles/683920/

👉 @golang_lib
Есть ли жизнь на Go после C#?

Всем привет! На связи Пётр, Go-разработчик в команде Ozon, которая занимается управлением товарами торговой площадки. Всё, что загружают продавцы, обрабатывается нашими сервисами. Девять месяцев назад я сменил основной язык программирования с C# на новый для меня Go. В статье будут впечатления от Go, расскажу о некоторых различиях между языками, а в конце поделюсь своим опытом поиска работы на новом языке. Ведь вопрос смены стека технологий рано или поздно встаёт перед каждым разработчиком.

https://habr.com/ru/companies/ozontech/articles/684422/

👉 @golang_lib
Media is too big
VIEW IN TELEGRAM
Как на самом деле устроены каналы в Golang?

Разбираемся со внутренним устройством каналов: как реализована потокобезопасноть, как в буферизированном канале хранятся данные, какие интересные оптимизации там есть, как работает оператор Select, как каналы закрываются и др.

00:00 Вступление
00:38 Какие свойства каналов интересно изучить?
01:22 Проектирование каналов
01:32 В какой области памяти хранятся каналы?
02:00 Структура канала
04:08 Реализация свойств: goroutine-safe и FIFO
05:04 Как работают буфер канала и mutex
07:18 Передача данных в канал
08:21 Получение данных из канала
08:38 Переполнение буфера
09:05 Как устроен планировщик (Scheduler)
10:14 Как поставить горутину на паузу
10:56 Как разбудить горутину: очередь спящих горутин - sendq
13:49 Чтение из переполненного канала
15:57 Пробуждение спящей горутины Sender
17:43 Чтение из пустого канала
18:44 Передача данных напрямую между стэками двух горутин
19:11 Небуферизированные каналы
19:37 Итоги по изучению интересных свойств каналов
20:35 Изучаем код реализации каналов
28:22 Изучаем поведение канала вживую с помощью дебагера
35:23 Как работает Select
37:14 Закрытие канала
38:13 Код закрытия канала
39:20 Итоги: почему каналы спроектированны именно так?
40:48 Заключение

источник

👉 @golang_lib
Go functions: автоматическое масштабирование и метрики с Kubernetes + OpenFaaS

OpenFaaS - открытый фреймворк, опирающийся на свободные технологии с открытым исходным кодом, такие как Docker и формат OCI, - демократизирует то, что обычно связано с замкнутым кругом поставщиков: функции как сервис. Развернутая в Kubernetes, она предлагает автомасштабирование, метрики и встроенный пользовательский интерфейс из коробки.

https://dominikbraun.io/blog/go-functions-as-a-service-with-kubernetes-and-openfaas/

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

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

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

https://habr.com/ru/companies/timeweb/articles/810857/

original https://blog.geisonbiazus.com/posts/applying-clean-architecture-in-go

👉 @golang_lib
Средние highload паттерны на Go

Меня зовут Агаджанян Давид и ранее я опубликовал статью «простые highload паттерны на Go», в которой были рассмотрены простые подходы увеличения пропускной способности отдельно взятого экземпляра приложения без хардкора. Мне импонируют простые подходы, так как over engineering подходы требуются в исключительных проектах, и то чаще всего только в отдельно взятых подсистемах, в остальном можно воспользоваться давно известными лучшими практиками. Статья ориентирована на начинающих разработчиков и может служить отправной точкой для дальнейшего изучения. В этой статье подходы ориентированы на масштабирование приложения при верхнеуровневом рассмотрении. Подходы универсальны, приписка языка Go только потому, что сама реализация приложения на нем. Для наглядности, примеры будут упрощены, а чтобы было интереснее наблюдать, проведем замеры производительности. Ну и конечно же делитесь своим опытом масштабирования, буду рад взять на заметку.

https://habr.com/ru/articles/684904/

👉 @golang_lib
Пишем нативный потоковый пайплайна на Go

За последний год в Beam Go Sdk появилось несколько функций для поддержки нативных потоковых DoFns. В этом докладе Дэнни, инженер-программист Google, и Джек, инженер-программист Google, расскажут об этих функциях и обсудят, как их можно использовать для создания потоковых конвейеров, написанных полностью на Go.
Вы получите представление о некоторых проблемах, связанных с обработкой неограниченных наборов данных. Вы также узнаете, как можно построить собственные потоковые DoFns для решения этих проблем.

https://www.youtube.com/watch?v=PNDY2OYASrE

👉 @golang_lib
Паттерны гонки данных в Go

Uber использует язык Golang (сокращенно Go) в качестве основного языка программирования для разработки микросервисов. Наш монорежим Go состоит примерно из 50 миллионов строк кода (и продолжает расти) и содержит около 2 100 уникальных сервисов Go (и продолжает расти).

https://www.uber.com/blog/data-race-patterns-in-go/

👉 @golang_lib
Media is too big
VIEW IN TELEGRAM
Код на Golang: форматирование и линтинг

00:00 | Вступление
00:08 | Зачем нужно форматирование кода на Go
00:45 | Форматер кода fmt
01:51 | Зачем нужен линтер кода на Go
02:08 | Линтер vet
03:52 | Линтер golangci-lint
06:40 | Линтер gofumpt
06:59 | Запускаем линтер gofumpt в режиме исправления ошибок
07:27 | Конфигурационный файл для golangci-lint
08:09 | Git Hooks
08:34 | Устанавливаем Left Hook
09:29 | Настраиваем запуск golangci-lint перед коммитом
09:37 | Коммитим изменения
09:54 | Заключение

источник

👉 @golang_lib
2025/06/19 10:49:18
Back to Top
HTML Embed Code: