Golang вопросы собеседований
13.7K subscribers
657 photos
5 videos
1 file
463 links
@notxxx1 - админ

@Golang_google - Golang для разработчиков

@itchannels_telegram - 🔥лучшие из ит

@golangl - chat

@golangtests - golang tests

@golang_jobsgo - go chat jobs

@ai_machinelearning_big_data - AI

@data_analysis_ml

РКН: clck.ru/3FmtKd
加入频道
⚙️ Option Pattern в Go: гибкая и читаемая настройка объектов

В статье Leapcell ["Option Pattern in Go: Advanced Parameter Handling"](https://dev.to/leapcell/option-pattern-in-go-advanced-parameter-handling-15hf) рассматривается эффективный способ управления параметрами функций и конструкторов в Go.:contentReference[oaicite:7]{index=7}

## 🧩 Проблема

:contentReference[oaicite:9]{index=9}:contentReference[oaicite:11]{index=11}


func NewServer(addr string, port int, timeout time.Duration, maxConn int, protocol string) *Server {
// ...
}


Недостатки:
- :contentReference[oaicite:13]{index=13}
- :contentReference[oaicite:16]{index=16}
- :contentReference[oaicite:19]{index=19}
- :contentReference[oaicite:22]{index=22}:contentReference[oaicite:24]{index=24}

## 💡 Решение: Option Pattern

:contentReference[oaicite:26]{index=26}:contentReference[oaicite:28]{index=28}


type Server struct {
addr string
port int
timeout time.Duration
maxConn int
protocol string
}

type Option func(*Server)

func WithTimeout(t time.Duration) Option {
return func(s *Server) {
s.timeout = t
}
}

func WithMaxConn(max int) Option {
return func(s *Server) {
s.maxConn = max
}
}



:contentReference[oaicite:30]{index=30}:contentReference[oaicite:32]{index=32}


func NewServer(addr string, opts ...Option) *Server {
s := &Server{
addr: addr,
port: 8080,
timeout: 30 * time.Second,
maxConn: 100,
protocol: "tcp",
}

for _, opt := range opts {
opt(s)
}
return s
}


Использование:


server := NewServer("localhost",
WithTimeout(60*time.Second),
WithMaxConn(500),
)


## 🛠️ Дополнительные возможности

- Валидация параметров:


func WithPort(port int) Option {
return func(s *Server) {
if port < 0 || port > 65535 {
panic("invalid port number")
}
s.port = port
}
}


- Группировка опций:


type NetworkOptions struct {
Protocol string
Timeout time.Duration
}

func WithNetworkOptions(opts NetworkOptions) Option {
return func(s *Server) {
s.protocol = opts.Protocol
s.timeout = opts.Timeout
}
}


Преимущества

- :contentReference[oaicite:34]{index=34}
- :contentReference[oaicite:37]{index=37}
- :contentReference[oaicite:40]{index=40}
- :contentReference[oaicite:43]{index=43}:contentReference[oaicite:45]{index=45}

:contentReference[oaicite:47]{index=47}:contentReference[oaicite:49]{index=49}

📌 Читать
👣 В Go 1.24 есть много поводов для восторга: поддержка постквантовой криптографии, полноценная поддержка псевдонимов для обобщённых типов, а также ряд улучшений производительности в рантайме Go, которые значительно снижают нагрузку на CPU в большинстве приложений.

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

https://io.google/2025/explore/pa-keynote-17

@golang_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Полный гид по GPU-экосистеме — без воды и маркетинга

Если ты путаешься в CUDA, OpenCL, SYCL и HIP — этот гайд от ENCCS расставит всё по полочкам. Это не просто обзор, а чёткое объяснение, как устроен мир GPU-программирования сегодня.

🧠 Что ты узнаешь:

🔹 Как и почему GPU радикально отличается от CPU
🔹 Из чего состоит стек GPU-технологий:
 — CUDA и его аналоги (HIP, SYCL, OpenCL)
 — Директивы: OpenMP, OpenACC
🔹 Какие языки и стандарты поддерживают какую архитектуру
🔹 NVIDIA, AMD, Intel — кто что умеет и чем отличается
🔹 Модели памяти, исполнения, и что влияет на производительность

📌 Гайд подходит для:
• Разработчиков HPC и научных расчётов
• Инженеров ML/AI, желающих копнуть глубже
• Всех, кто хочет разобраться в низкоуровневом GPU-стеке без маркетингового тумана

📖 Читать:
https://enccs.github.io/gpu-programming/2-gpu-ecosystem/

🔥 Один из самых понятных и системных разборов GPU-мира на сегодня.

#GPU #CUDA #OpenCL #HIP #SYCL #HPC #AI #HighPerformanceComputing
📁 doublestar — расширенная поддержка glob-паттернов в Go

Альтернатива стандартному path/filepath.Glob в Go, с поддержкой:

• ** — рекурсивных поддиректорий
• Расширенных классов символов ([[:alpha:]], [[:digit:]])
• Исключающих шаблонов (!(pattern), @(pattern), ?(pattern))
• Более гибких масок в стиле Bash/Zsh

go get github.com/bmatcuk/doublestar/v4

🔧 Использование:


matches, err := doublestar.Glob("**/*.go")


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

👉 Если filepath.Glob не хватает — doublestar легко заменяет его, не ломая привычный интерфейс.

github.com/bmatcuk/doublestar
🌀 RLX OS — минималистичная Linux-операционка, написанная на Go, запускаемая из одного файла

Проект — это легковесная, контейнерно-ориентированная Linux-система, которую можно запустить как один исполняемый файл. Идеально подходит для embedded-устройств, безопасных сред и DevOps-экспериментов.

### ⚙️ Основные особенности:

🚀 Монолитный исполняемый образ — всё в одном .efi`- или .iso`-файле
🧱 Immutable by design — неизменяемая, безопасная структура
📦 App Containers — встроенная поддержка запуска приложений как изолированных контейнеров
🌐 Zero-dependency init system — простая и быстрая загрузка
🛡️ Фокус на минимуме, скорости и контроле
💡 Поддержка Live Boot, конфигурации через YAML и кастомных сборок

📦 Отличный выбор для:
• DIY-дистрибутивов
• Специализированных рабочих станций
• Безопасной разработки без зависимости от сторонних пакетов

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

@golang_interview
⚡️ Thunder — минималистичный фреймворк для API на Go

[Thunder](https://github.com/Raezil/Thunder) — это лёгкий и быстрый инструмент для создания API-серверов на Go. Он фокусируется на простоте, читаемости и строгой типизации без лишних абстракций.

🧩 Ключевые особенности:

🧼 Чистая архитектура — без лишнего "магического" кода
💡 Использует Go-дженерики для гибкости и типобезопасности
⚙️ Простое подключение middleware и обработчиков
🧪 Упрощённое тестирование маршрутов
🪶 Низкий порог входа и лёгкая интеграция в существующие проекты


👨‍💻 Пример:


thunder.Get("/ping", func(c thunder.Context) error {
return c.JSON(200, "pong")
})


Всё просто и по-Goшному.


📦 Подходит для:
• Быстрой сборки REST API
• Микросервисов и CLI-инструментов
• Тех, кто хочет full-control без тяжёлых фреймворков

🔗 GitHub
🧮 Парсим `lsblk` и анализируем диски на Go — без зависимостей

Вместо тяжёлых утилит можно легко написать парсер для анализа дисков прямо на Go.
В блоге Rezmoss показано, как создать свой анализатор дисков и разделов, используя lsblk и стандартную библиотеку Go.

🔍 Что делает утилита:
• Запускает lsblk -J и получает JSON
• Парсит структуру блок-устройств и их монтирования
• Выводит дерево разделов, меток и точек монтирования
• Работает без сторонних зависимостей

📦 Используются только:
os/exec для запуска lsblk
encoding/json для разбора вывода
• Стандартные структуры Go для представления дисков

🧠 Полезно для:
• CLI-утилит по управлению хранилищем
• системных тулов в Linux
• кастомных мониторингов и автоконфигурации

🔗 Читай подробнее: rezmoss.com/blog/disk-partition-analyzer-in-go/

#golang #linux #sysadmin #devtools #cli
🔥 7 000+ упражнений на 76 языках программирования

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

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

https://exercism.org/
📦 Nubo — репозиторий формальных доказательств для Dedukti

Если вы работаете с формальными доказательствами и Dedukti — Nubo упрощает жизнь.

🔹 Это централизованный репозиторий библиотек с метаданными: имя, версия, зависимости, синтаксис, флаги.
🔹 Поддерживает загрузку (make download), проверку (make check) и упаковку (make package).
🔹 Работает через Makefile-сборку, автоматически управляя зависимостями и структурами.
🔹 Стандартизирует хранение и верификацию библиотек, пригоден для масштабирования и CI.

👨‍🔬 Полезно для исследователей, разработчиков Dedukti и формальных систем.

🔗 GitHub: https://github.com/nubolang/nubo
Вакансиb для Golang-разработчиков в Otello!

1️⃣ Разрабатываем сервис бронирования, где команда сама отвечает за архитектуру, консистентность данных и деплой.

2️⃣ Максимум ответственности и развитияТы сам проектируешь фичи, принимаешь решения и доводишь их до продакшена. У нас нет бюрократии и долгих согласований — есть автономные команды и возможность проявить лидерские качества.

3️⃣ Технологический стек, который радуетGo, PostgreSQL, Clickhouse, Kafka, Kubernetes, Prometheus, Grafana и многое другое. Пишем гексагональные REST-сервисы, разворачиваемся в четырех датацентрах. Любим архитектурные обсуждения, но технологии для нас — не самоцель, а инструмент.

4️⃣ Процесс, который не бесит. Работаем по Shape Up, поэтому без бесконечных таск-трекеров и бесцельных стендапов. Всегда задаем себе вопрос "Зачем?" и находим лучшие ответы на "Как?".

5️⃣ Классная команда и атмосфера. Мы ценим простые и эффективные решения, любим обсуждать архитектуру и масштабирование, а еще умеем работать динамично и с кайфом.

🔥 Если тебе близко —откликайся!
🚀 Production Go API Template — готовый шаблон для продакшн-бэкенда на Go

Репозиторий trakora/production-go-api-template — это минималистичный и структурированный старт для разработки API‑сервисов на Go, с учётом лучших практик.

📦 Что внутри:
• Чистая архитектура и модульная структура
• Поддержка PostgreSQL, Redis, миграций и хранилищ
• Встроенная обработка ошибок, логгирование, тесты
• JWT-аутентификация, конфигурация через .env
• Готовность к деплою в Docker и CI/CD

💡 Подходит для:
• Быстрого запуска продакшн‑сервисов
• MVP, стартапов, микросервисов
• Разработчиков, которые хотят "не изобретать велосипед"

🔗 GitHub: https://github.com/trakora/production-go-api-template

#golang #backend #api #webdev #goproject #архитектура
👣 logporter - простой и легковесный экспортер (альтернатива cAdvisor), для получения метрик из контейнеров Docker, а также количества логируемых сообщений и отображение времени работы для всех контейнеров.

💡 В процессе анализа работы контейнеров, может быть полезно сравнение повышенной нагрузки с количеством логируемых сообщений, при этом, если приложение не является ресурсоемким, количество логов покажет возросшую нагрузку. Это также ускорьте анализ журнала, отображая, в какой момент времени было получено наибольшее количество сообщений из стандартного потока (stdout) и потока ошибок (stderr).

👉 Для проекта будет полезно получить обратную связь по актуальности и настройке текущего Dashboard для Grafana (изменения можно внести самостоятельно через Pull Request). Вы также можете предложить, какие еще кастомные метрики можно было бы реализовать.

🔐 Лицензия: MIT
Please open Telegram to view this post
VIEW IN TELEGRAM
🛡️ Инструмент для анализа Kerberos

KerbTool — это утилита для взаимодействия с Kerberos-протоколом, разработанная для тестирования безопасности и проведения атак на аутентификацию в Active Directory. Написана на Go.

🧰 Возможности:
• AS-REQ с любым именем пользователя (без предварительной аутентификации)
• Получение TGT и TGS
• Поддержка дешифровки и анализа билетов
• Brute-force и словарные атаки на учетные записи
• Поддержка режимов "kerberoasting" и "asreproasting"
• Работает в Linux, Windows и MacOS

🎯 Для чего используется:
• Red team-проверки
• Аудит конфигурации Kerberos
• Тестирование уязвимостей в аутентификации
• Извлечение хэшей из TGS/AS-REP без входа в систему

💡 Альтернатива таким инструментам как Impacket и Rubeus, но в удобной кроссплатформенной обёртке на Go.

https://github.com/jfjallid/kerbtool
Forwarded from Golang
🌀 Go 1.25 приносит мощный апгрейд JSON-библиотеки: encoding/json/v2 — переработанная с нуля система сериализации с гибкой настройкой, высокой скоростью и новым API

Что изменилось:

● Прямая работа с io.Writer и io.Reader
Новые функции MarshalWrite и UnmarshalRead позволяют писать и читать JSON напрямую, без создания Encoder/Decoder. Это упрощает потоковую работу и уменьшает аллокации.

● Потоковая обработка JSON
Появился модуль jsontext с функциями MarshalEncode и UnmarshalDecode, которые читают и пишут JSON по одному объекту за раз. Это критично для систем, обрабатывающих большие JSON-потоки, например, в Kubernetes.

● Гибкая настройка
Теперь функции Marshal и Unmarshal принимают опции, напрямую влияющие на формат вывода и поведение парсера:
- OmitZeroStructFields(true) — пропускать нулевые поля
- StringifyNumbers(true) — числа как строки
- MatchCaseInsensitiveNames(true) — имена полей без учёта регистра
- FormatNilMapAsNull(true)nil`-карты как `null
- WithIndent(" ") — отступы в JSON

Пример:

json.Marshal(
user,
json.OmitZeroStructFields(true),
json.StringifyNumbers(true),
jsontext.WithIndent(" "),
)


● Новое поведение по умолчанию
Теперь:

JSON-парсинг чувствителен к регистру

Дублирующиеся ключи запрещены

Неизвестные поля игнорируются, если не указано иное

Можно включить прежнее поведение опциями (например, MatchCaseInsensitiveNames)

● Ускорение десериализации
Внутренний движок полностью переписан — ускорение десериализации в 2.7–10.2 раз. При использовании потоковых API (UnmarshalJSONFrom) — прирост до 40×.

● Экспериментальный статус
API ещё может меняться. По умолчанию encoding/json использует новый движок, но json/v2 доступен отдельно и требует флага:



GOEXPERIMENT=jsonv2


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

📌 Полный разбор и примеры

@golang_google

#golang #go #JSON