37.1K subscribers
1.46K photos
33 videos
5 files
1.62K links
加入频道
👣 Deep vs Shallow Go interfaces

В этой статье рассматривается концепциюя «глубоких» и «поверхностных» интерфейсов в Go, основываясь на идеях из книги Джона Оустерхута «A Philosophy of Software Design».

Автор утверждает, что
"правильные" модули предоставляют мощную функциональность через простые интерфейсы, подчеркивая важность соотношения между полезностью абстракции и сложностью её интерфейса.


Пример глубокого интерфейса:
В качестве примера глубокого интерфейса рассматривается io.Reader из стандартной библиотеки Go:​


type Reader interface {
Read(p []byte) (n int, err error)
}


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

Пример поверхностного интерфейса:

В противоположность, рассматривается интерфейс Cmdable из клиента go-redis, который включает около 200 методов:​


type Cmdable interface {
Pipeline() Pipeliner
Pipelined(ctx context.Context, fn func(Pipeliner) error) ([]Cmder, error)
// ... множество других методов ...
}


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

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

🔗 Подробнее

@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 "Go Docs Syntax Highlighter" - это полезное для Гоферов Chrome расширение, которое
добавляет синтаксическую подсветку (раскрашивает ключевые слова, типы данных, строки, комментарии и т.д.) к блокам кода Go на различных сайтах и документах.

Расширение делает примеры кода значительно более наглядными и легкими для восприятия.

🔗 Скачать

@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Пишете на Go или хотите на него перейти??

Тогда почему мы ещё не видим вашу регистрацию на Avito Go Drinkup #2? 🚀

Если без шуток, 23 апреля бэкендеры соберутся в офисе Авито на Лесной на «круглые столы», чтобы обсудить:

➡️Архитектуру микросервисов на Go;
➡️Как перейти с другого языка на Go;
➡️Карьерный путь в бэкенде;
➡️Реальные кейсы использования Go.

И ещё много чего! Посмотреть подробнее и зарегистрироваться можно тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 browserhttp

Go-пакет, который полностью совместим с интерфейсом http.Client.

Однако, в отличие от стандартного клиента, он использует настоящий безголовый браузер (Chrome через библиотеку chromedp) для отправки запросов и взаимодействия с веб-страницами.

Данный подход позволяет:

- Выполнять рендеринг JavaScript и обрабатывать динамические страницы «как настоящий браузер» (включая работу с куками, DOM, скриптами).

- Обходить системы защиты (например, WAF или анти-бот средства), которые могут блокировать стандартные HTTP-запросы.

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

Основные возможности
- Полная совместимость с http.Client
Можно использовать browserhttp в существующем коде как замену стандартному клиенту (метод Do(*http.Request)).

- Реальные сессии с помощью Chrome
Запросы обрабатываются внутри настоящего браузера, обеспечивая поведение, максимально близкое к «живому» пользователю.

- Поддержка GET и POST
Базовые HTTP-запросы отправляются так же, как в стандартном клиенте.

- Симуляция отправки форм
Можно взаимодействовать с динамическими формами, которые зависят от JavaScript.

- Подробный лог запросов
При включённом режиме EnableVerbose() можно отлаживать и отслеживать все действия клиента.

- Сохранение сессии
Поддерживаются многоэтапные сценарии с сохранением вкладок и сессий между запросами (например, логин → переход к другой странице).

✔️ Github

@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Вакансия Golang-разработчика в Otello!

1️⃣ Разрабатываем сервис бронирования, где команда сама отвечает за архитектуру, консистентность данных и деплой.
2️⃣ Максимум ответственности и развитияТы сам проектируешь фичи, принимаешь решения и доводишь их до продакшена. У нас нет бюрократии и долгих согласований — есть автономные команды и возможность проявить лидерские качества.
3️⃣ Технологический стек, который радуетGo, PostgreSQL, Clickhouse, Kafka, Kubernetes, Prometheus, Grafana и многое другое. Пишем гексагональные REST-сервисы, разворачиваемся в четырех датацентрах. Любим архитектурные обсуждения, но технологии для нас — не самоцель, а инструмент.
4️⃣ Процесс, который не бесит. Работаем по Shape Up, поэтому без бесконечных таск-трекеров и бесцельных стендапов. Всегда задаем себе вопрос "Зачем?" и находим лучшие ответы на "Как?".
5️⃣ Классная команда и атмосфера. Мы ценим простые и эффективные решения, любим обсуждать архитектуру и масштабирование, а еще умеем работать динамично и с кайфом.
🔥 Если тебе близко —откликайся!
📊 Vince — локальная альтернатива Google Analytics на Go

Vince — self-hosted система веб-аналитики с упором на конфиденциальность и простоту развертывания.

Основные характеристики:
— Установка одной командой (bash, Docker, Helm)
— Без использования cookie
— Соответствие GDPR, CCPA, PECR
— Поддержка событий: клики, загрузки, ошибки 404, пользовательские действия
— Интеграция с Plausible-совместимыми скриптами
— Автоматический TLS (Let's Encrypt)
— Возможность публичных дашбордов
— Неограниченное число сайтов и событий

Система не поддерживает воронки, но охватывает базовую аналитику: уникальные посетители, просмотры, длительность сессий, разбивку по источникам и устройствам.

Плюсы: полный контроль над данными, отсутствие внешних трекеров, минималистичный скрипт.

🔗 Репозиторий

@golang_google
👣 Wax

Это попытка принести JSX / TSX синтаксис в мир Go-шаблонов.

Не SSR, не React, а альтернатива html/template и Templ с более выразительным и современным синтаксисом.

📌 В чём суть?
Wax позволяет писать Go-шаблоны, используя знакомую по фронтенду структуру JSX-компонентов — но всё это компилируется и работает на Go-бэкенде.

🧩 Что под капотом?

- JSX/TSX обрабатывается через esbuild
- Код транслируется в Go-шаблоны с типами

🧪 Это похоже на рендеринг компонентов, но на Go — без React, VDOM Чистый вывод HTML, но с привычным JSX-стилем.

📜 Wax компилирует JSX в Go-код, минуя всю экосистему React.

Подойдет тем, кто хочет писать компоненты в духе React, но оставаться в Go-экосистеме и тем, кто делает JAMStack / MPA / гибридные сайты без тяжёлого фронта

🖥 Github

@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 depgraph

Инструмент для анализа зависимостей Go-модулей (на GitHub).

🔍 Что делает:
- Сканирует указанные GitHub-аккаунты или организации
- Ищет публичные репозитории с Go-кодом
- Читает их go.mod файлы (в них указаны зависимости)
- Строит граф зависимостей между модулями

📦 Выводит:
Граф зависимостей в формате DOT (можно визуализировать через Graphviz)

Или топологическую сортировку — порядок, в котором модули зависят друг от друга (например, для правильной сборки)

Пример применения:
- У тебя есть несколько Go-проектов в организации, и ты хочешь:- Понять, какие модули используют какие зависимости
- Найти циклы, повторяющиеся зависимости
- Визуализировать это как граф

go install github.com/ldemailly/depgraph@latest

🔗Github

@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣  Возможность стать частью команды ВКонтакте для Go-разработчиков

💡 ВКонтакте запускает технологический проект по переходу на сервисную архитектуру и построению единой платформы разработки. Для развития современного технологического стека и написания архитектуры планируется привлечь больше 100 Go-разработчиков.

🗓  24 апреля в офисе компании в Питере пройдет митап. На нем можно будет узнать о том, как попасть в команду и что надо будет делать.

@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 go-audit — альтернатива auditd от Slack на Go 🐹

go-audit — лёгкое и эффективное решением для аудита безопасности в Linux, созданным инженерами из Slack.

🔧 Что это такое?
go-audit — это демон, который напрямую подключается к ядру Linux через audit netlink socket (/dev/audit) и перехватывает системные события в реальном времени — без использования ausearch или разбора логов вручную.

🧠 Что он умеет?
Подключается напрямую к audit subsystem через netlink
Слушает события ядра: запуск процессов, доступ к файлам, ошибки и т.п.
Преобразует их в структурированный JSON
Отправляет данные в:
stdout / файл
syslog
HTTP / Kafka
Поддерживает фильтрацию событий по типу
Подходит для real-time мониторинга и интеграции с SIEM-системами

⚙️ Почему это важно?
Это быстрая, расширяемая и удобная альтернатива auditd, особенно если вы работаете с современными инструментами логирования и хотите больше контроля над потоками событий.

📁 Репозиторий

@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Вопрос:

Что будет выведено на экран?


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


package main

import (
"fmt"
"time"
)

type Speaker interface {
Speak() string
}

type Person struct {
name string
}

func (p Person) Speak() string {
return "Hi, I'm " + p.name
}

func main() {
var s Speaker
p := Person{name: "Alice"}
s = p

p.name = "Bob"

fmt.Println(s.Speak()) // (1)

func() {
s := p // shadowing: s — это теперь Person, а не Speaker
fmt.Println(s.Speak()) // (2)
}()
go func(p Person) {
time.Sleep(10 * time.Millisecond)
fmt.Println(p.Speak()) // (3)
}(p)

p.name = "Charlie"

time.Sleep(20 * time.Millisecond)
}


💡Подсказки:
Что происходит с интерфейсами в Go при присвоении структур?

Что такое shadowing и как это влияет на s внутри анонимной функции?

Как работает передача аргументов в goroutine?

Как изменения структуры после передачи влияют на уже переданные значения?



Ответ:

Hi, I'm Alice
Hi, I'm Bob
Hi, I'm Bob


@golangtests
👣 Ninjabot — фреймворк для алгоритмического трейдинга на крипторынке, написанный на Go.

Он позволяет тестировать стратегии на исторических данных и запускать их в реальной торговле на Binance (спот и фьючерсы).

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

🖥 GitHub

@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Обращаемся ко всем, кто пишет на Go и не только… Какие планы на 23 апреля?

Тогда решено — идём на Avito Go Drinkup #2 в офис на Лесной. Обещают «круглые столы», за которыми участники будут обсуждать:

➡️Архитектуру микросервисов на Go;
➡️Как перейти с другого языка на Go;
➡️Карьерный путь в бэкенде;
➡️Реальные кейсы использования Go.

И ещё много чего! Посмотреть подробнее и зарегистрироваться можно тут.
Please open Telegram to view this post
VIEW IN TELEGRAM
👣 «Streaming Large Files Between Microservices: A Go Implementation» - практическое руководство по эффективной передаче больших файлов между микросервисами на Go.​

🔍 Основная идея
Автор предлагает решение для передачи больших данных между микросервисами, используя стандартные возможности HTTP/1.1, такие как Range-запросы и заголовки Content-Encoding. Цель — избежать загрузки всего файла в память и обеспечить возможность возобновления передачи при прерывании соединения.​


🛠️ Ключевые особенности
Потоковая передача данных: Использование io.Reader, io.Writer и bufio для чтения и записи данных по частям, что снижает нагрузку на память.​

Поддержка Range-запросов: Позволяет клиенту запрашивать конкретные части файла, что особенно полезно при возобновлении прерванных загрузок.​

Селективное сжатие
: Сервер сжимает данные с помощью gzip только при определенных условиях, учитывая тип содержимого и размер чанка, а также поддержку со стороны клиента.​

Обработка прерываний: Реализация корректного завершения работы при получении сигналов SIGINT, SIGTERM и SIGHUP.​

Определение типа содержимого: Сервер определяет MIME-тип файла с помощью расширения и функции http.DetectContentType, что помогает в принятии решений о сжатии.​
DEV Community

📌 Почему это важно
Предложенный подход позволяет эффективно передавать большие файлы между микросервисами без необходимости использования сторонних сервисов хранения, таких как S3. Это особенно полезно в системах, где требуется высокая производительность и надежность передачи данных.​

📌 Подробности

@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM
Как привлечь внимание к своему IT-продукту? 👀

17 апреля в 11:00 облачный провайдер Cloud․ru проведет вебинар о преимуществах публикации продуктов в маркетплейсе.

Вы узнаете:
😶‍🌫️что такое Маркетплейс Cloud․ru;
😶‍🌫️типы продуктов на витрине и особенности их использования;
😶‍🌫️публикация продукта на витрине: условия, этапы, сопровождение.

Эксперт проведет live-демо по публикации на витрине и ответит на вопросы зрителей.

Регистрируйтесь по ссылке 👈
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
🌐 Weather MCP Server — лёгкий Go-сервер для ИИ-доступа к погоде

Этот проект реализует лёгкий сервер на Go по протоколу MCP (Model Context Protocol). Он позволяет ИИ-ассистентам, таким как Claude, подключаться к погодным API и интерпретировать данные в реальном времени.

🧩 Что делает:
Предоставляет интерфейс MCP для интеграции с LLM
Получает и обрабатывает прогноз с OpenWeather API
Позволяет ИИ «понимать» текущую погоду и тренды
Подходит для систем, где ИИ должен принимать решения на основе реальных данных

🚀 Используется как context tool — внешняя служба, к которой ИИ обращается за фактами.

🔗 Репозиторий
1,5 млн человек пользуются умным домом с Алисой каждую неделю! Над экосистемой умных устройств Яндекса трудится большая команда, которая придумывает новые способы сделать бытовую жизнь еще комфортнее.

Сейчас ребята в поиске разработчика на Go — нужно разрабатывать сценарии автоматизации умного дома и расширять API для поддержки новых устройств.

Если умеете писать высокопроизводительный код и хотите сделать жизнь миллионов людей комфортнее — переходите на сайт, там больше о вакансии.
👣 Fibratus — инструмент для мониторинга и трассировки ядра Windows.

Он позволяет отслеживать системные события, включая:
- запуск и завершение процессов
- операции с файловой системой
- изменения в реестре
- сетевую активность
- и другие сигналы наблюдаемости

📌 Fibratus работает без драйверов и стороннего ПО, делая его удобным и эффективным для анализа системы.

$ msiexec /i fibratus-2.3.0-amd64.msi /qn

🔗 GitHub

@golang_google
Please open Telegram to view this post
VIEW IN TELEGRAM