Откройте для себя распространенные антишаблоны архитектуры, узнайте, как их избегать и преодолевать "подводные камни" проектирования!
Антипаттерн (англ. anti-pattern) — это распространённый подход к решению класса часто встречающихся проблем, являющийся неэффективным, рискованным или непродуктивным. В отличие от шаблона проектирования, рассмотрение антипаттерна включает в себя как неправильное решение проблемы с его признаками и последствиями, так и выход из ситуации.
В этом проекте собраны ценные сведения, практические советы и примеры из реальных проектов для обучения и помощи в создании лучших программных архитектур и улучшать существующие.
▪Проект
▪Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Дайджест полезных материалов из мира Golang за неделю
Почитать:
— Миграции в YDB с помощью «goose»
— Логирование в Golang
— 100 вопросов для подготовки к собесу Data Science
— Дженерики в go
— Проектирование fault-tolerant систем на Go
— WebSocket в Go и причем тут горилла
— Building golang project from scratch - part 3 - setting up the database using docker
— Build a Golang Todo App Backend: A Step-by-Step Guide
— Go versus Rust: Choosing the Best Language for You to Learn in 2024
— Automate the task of creating requirements.txt with pyreqs!
— OnLogs – open-source simplified web logs viewer for Docker containers
— Evitando SQL Injection com Golang
— 5 Golang Features I Wished Were Different!
— Десять самых ярких ИИ-работ от NVIDIA Research за 2023 год
Посмотреть:
🌐 100 вопросов с собеседований Data Science — часть 1 (⏱ 36:48)
🌐FULL STACK Golang + HTMX Building an Engineer Recruitment Platform Golang ~ LIVE!
🌐 Building FFAAS In Go. Fast Function As A Service. (⏱ 01:48:16)
🌐 Coding Instant WASM Rollbacks In Go (⏱ 01:32:12)
🌐 Не мог найти первую работу программистом #айти #программирование #программист (⏱ 00:55)
🌐 Дубай для программиста | Сколько стоит жить в Дубае в 2023 (⏱ 05:38)
Хорошего дня!
@Golang_google
Почитать:
— Миграции в YDB с помощью «goose»
— Логирование в Golang
— 100 вопросов для подготовки к собесу Data Science
— Дженерики в go
— Проектирование fault-tolerant систем на Go
— WebSocket в Go и причем тут горилла
— Building golang project from scratch - part 3 - setting up the database using docker
— Build a Golang Todo App Backend: A Step-by-Step Guide
— Go versus Rust: Choosing the Best Language for You to Learn in 2024
— Automate the task of creating requirements.txt with pyreqs!
— OnLogs – open-source simplified web logs viewer for Docker containers
— Evitando SQL Injection com Golang
— 5 Golang Features I Wished Were Different!
— Десять самых ярких ИИ-работ от NVIDIA Research за 2023 год
Посмотреть:
🌐 100 вопросов с собеседований Data Science — часть 1 (⏱ 36:48)
🌐FULL STACK Golang + HTMX Building an Engineer Recruitment Platform Golang ~ LIVE!
🌐 Building FFAAS In Go. Fast Function As A Service. (⏱ 01:48:16)
🌐 Coding Instant WASM Rollbacks In Go (⏱ 01:32:12)
🌐 Не мог найти первую работу программистом #айти #программирование #программист (⏱ 00:55)
🌐 Дубай для программиста | Сколько стоит жить в Дубае в 2023 (⏱ 05:38)
Хорошего дня!
@Golang_google
Если бы у MongoDB и MySQL родился ребенок, то это был бы CursusDB. Шутки в сторону CursusDB - это распределенная документо-ориентированная in-memory база данных с открытым исходным кодом и SQL-подобным языком запросов, написанным на чистом GO.
▪Github
▪Документация
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Линтер для проверки проверки OpenTelemetry (End, SetStatus, RecordError)
go install github.com/jjti/go-spancheck/cmd/spancheck@latest
spancheck ./...
▪Github
▪Docs
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
💡 Hamlet
Шаблонный движок Haml для Go.
▪Github
▪Документация Haml
@Golang_google
Шаблонный движок Haml для Go.
Haml
(язык абстрактной разметки HTML) основан на одном главном принципе: разметка должна быть красивой. Это не просто красота ради красоты: Haml ускоряет и упрощает создание шаблонов.go install github.com/stackus/hamlet/cmd/hamlet@latest
▪Github
▪Документация Haml
@Golang_google
Gtkcord4 - клиент Discord на Go и GTK4.
go install -v github.com/diamondburned/gtkcord4@latest
▪Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Проведите стресс-тестирование своей базе данных с помощью заранее заданных запросов.
Библиотека поможет найти медленные и неэффективные запросы, которые мешают работе.
go install github.com/adaptive-scale/[email protected]
▪Github@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Он поддерживает различные функции, такие как автоматическая обработка запросов, ограничение скорости запросов и другие, что делает его идеальным как для простых, так и для сложных HTTP-запросов.
go get -u github.com/davesavic/clink
▪Github▪Примеры
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Бенчмарк семи популярных драйверов Go SQLite.
▪ Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Пакетом dot решается проблема добавления данных во вложенных структурах, ассоциативных массивах, срезах и каналах любой сложности и различных типов данных. Если точный путь к требуемому полю известен, но на этом пути имеется карта, нужно сначала корректно ее инициализировать, проверить наличие такого ключа, а затем вставить значение.
Для простой структуры этот пакет не нужен, а вот для иерархии посложнее проект dot Golang с открытым исходным кодом придется кстати.
Расставьте точки над «i», контролируйте данные
Приведу простой пример проблемы, с которой столкнулся, хотя иерархия структур у меня посложнее и пути к полям в будущем могут поменяться:
type Second struct {
Items []string
}
type First struct {
Store map[string]Second
}
📌 Продолжение
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Инструмент CLI, выполняющий SQL-запросы к различным файлам, включая файлы xlsx, и выводящий результаты в различные файлы.
▪Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
🥳 Выпущены версии Go 1.21.6 и 1.20.13!
📢 Анонс: https://groups.google.com/g/golang-announce/c/F12eMaUITDs
⬇️ Скачать: https://go.dev/dl/#go1.21.6
#golang
@Golang_google
📢 Анонс: https://groups.google.com/g/golang-announce/c/F12eMaUITDs
⬇️ Скачать: https://go.dev/dl/#go1.21.6
#golang
@Golang_google
This media is not supported in your browser
VIEW IN TELEGRAM
OSINT инструмент, написанный на Go, который не поддерживает сбор и анализ информации по опреленном никнейму в сети.
Благодаря данному методу сбора можно построить цепочку всех упоминаний в интернете, в соц сетях, на сайтах и формумах.
go install github.com/theyahya/enola/cmd/enola@latest
▪Github
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
В статье описан довольно элегантный паттерн обработки ошибок, при написании
REST,gRPC
и других сервисов на Go. 📌Читать
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Начальный набор для создания веб-сервисов на Go с использованием возможностей Kubernetes.
Проект регулярно обновляется и использует минимальные зависимости, реализует чистый код и следует лучшим практикам программирования на Go.
▪Github
▪Docs
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Go - отличный язык для создания высокопроизводительных веб-приложений, а высокопроизводительные веб-приложения часто требуют централизованного кэширования.
Стандартом де-факто для централизованного кэширования является Redis, но, популярные сегодня библиотеки Go не поддерживают потоковую передачу данных, эффективных с точки зрения памяти.
Вместо этого они предлагают
[]byte API,
с которыми вы взаимодействуете следующим образом:// В этом коде используется https://github.com/redis/go-redis, но те же
// ограничения действуют для Rueidis и Redigo.
func redisHandler(w http.ResponseWriter, r *http.Request) {
ctx := context.Background()
// Extract key from RequestURI
key := strings.TrimLeft(r.RequestURI, "/")
// Get the value from Redis as a byte slice
val, err := rdb.Get(ctx, key).Bytes()
if err == redis.Nil {
http.Error(w, "Key not found in Redis", http.StatusNotFound)
return
} else if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
_, err = w.Write(val)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
Этот паттерн работает хорошо, если вы кэшируете небольшие объекты, но если вы кэшируете объекты размером более 1 кб, []byte-ориентированные API работют не так хорошо.
В протоколе Redis нет ничего такого, что мешало бы создать потоковый API. Поэтому пердставляем redjet, библиотеку Redis, ориентированную на производительность.
С помощью redjet вы можете написать приведенный выше код следующим образом:
func redisHandler(w http.ResponseWriter, r *http.Request) {
ctx := context.Background()
// Извлечение ключа из RequestURI
key := strings.TrimLeft(r.RequestURI, "/")
// Передаем значение непосредственно из Redis в ответ.
_, err := rdb.Command("GET", key).WriteTo(w)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
Код стал проще и эффективнее.
go get github.com/coder/redjet@latest
▪Github
▪Читать дальше
▪Бенчмарки
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Быстрая и простая в использовании CDN, на основе Go.
CDN (Content Delivery Network) — это географически распределённая сетевая инфраструктура, обеспечивающая быструю доставку контента пользователям веб-сервисов и сайтов. Входящие в состав CDN cерверы географически располагаются таким образом, чтобы сделать время ответа для пользователей сайта/сервиса минимальным.
В проекте использованы базы данных SQLite с GORM и веб-фреймворком Gin. UI построен с помощью Vite + React и wouter.
▪ Github
▪Docs
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
go install -v github.com/alpkeskin/mosint/v3/cmd/mosint@latest
▪GitHub@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Учебные материалы по Apache Kafka. Этот репозиторий создан как централизованный ресурс для всех, кто хочет изучить или углубить свои знания об Apache Kafka, независимо от уровня их опыта.
▪ Github
▪ Kafka-go
@Golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM