Библиотека Go-разработчика | Golang
23.3K subscribers
2.08K photos
42 videos
87 files
4.45K links
Все самое полезное для Go-разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/32d20779

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
💡Различные способы использования go get

🔸Вы, конечно, знаете, как получить последнюю версию модуля:

Либо для конкретного модуля...

$ go get golang.org/x/net


...либо для всех зависимостей главного модуля:

$ go get -u ./...


🔸Чтобы обновить все зависимости до последних патч-релизов текущей версии, используйте:

$ go get -u=patch ./...


🔸Но это еще не все. Например, вы можете обновить или понизить версию модуля до конкретной версии:

$ go get golang.org/x/text@v0.3.2


🔸Вы не ограничены использованием семантического номера версии. Вы можете использовать @latest, чтобы обновиться до последней версии, или @patch, чтобы обновиться до последнего патч-релиза. Или можете указать конкретную ветку VCS.

🔸Например, эта команда обновит модуль до последнего коммита в главной ветке модуля:

$ go get golang.org/x/text@main


🔸Вы даже можете удалить зависимость. Эта операция даже понижает версии модулей:

$ go get golang.org/x/text@none


🔸Команда go get может быть применена даже к инструментарию Go. Эта команда обновляет минимально требуемую версию Go для главного модуля (то есть обновляет директиву go в go.mod) и даже загружает последнюю или указанную версию инструментария, если это необходимо:

$ go get go
$ go get go@v1.21.4


🔸Начиная с Go 1.21, go mod также может предложить версию инструментария Go для компиляции модуля, используя директиву toolchain (в отличие от директивы go, которая устанавливает минимально требуемую версию Go для модуля). Директива go остается неизменной. Как и в случае с go get, вы можете использовать @patch, чтобы обновиться до последнего патч-релиза текущего инструментария Go.

$ go get toolchain
$ go get toolchain@v1.21.4
$ go get toolchain@patch
28👍10🔥2🤔1
💡Начиная с Go 1.22, функции Delete/DeleteFunc/Compact/CompactFunc/Replace в пакете стандартной библиотеки slices обнуляют освобожденные элементы, чтобы избежать потенциальной утечки памяти.

👉 Речь про этот proposal.

#новости
🔥26👍3
🧰cpuid — библиотека, которая предоставляет информацию о ЦП без использования CGO: количество физических и логических ядер, семейство ЦП и другие сведения.

☑️На данный момент поддерживает x86/x64 и Arm64. Не использует никакого CGO.

package main

import (
"fmt"
"strings"

. "github.com/klauspost/cpuid/v2"
)

func main() {
// Print basic CPU information:
fmt.Println("Name:", CPU.BrandName)
fmt.Println("PhysicalCores:", CPU.PhysicalCores)
fmt.Println("ThreadsPerCore:", CPU.ThreadsPerCore)
fmt.Println("LogicalCores:", CPU.LogicalCores)
fmt.Println("Family", CPU.Family, "Model:", CPU.Model, "Vendor ID:", CPU.VendorID)
fmt.Println("Features:", strings.Join(CPU.FeatureSet(), ","))
fmt.Println("Cacheline bytes:", CPU.CacheLine)
fmt.Println("L1 Data Cache:", CPU.Cache.L1D, "bytes")
fmt.Println("L1 Instruction Cache:", CPU.Cache.L1I, "bytes")
fmt.Println("L2 Cache:", CPU.Cache.L2, "bytes")
fmt.Println("L3 Cache:", CPU.Cache.L3, "bytes")
fmt.Println("Frequency", CPU.Hz, "hz")

// Test if we have these specific features:
if CPU.Supports(SSE, SSE2) {
fmt.Println("We have Streaming SIMD 2 Extensions")
}
}


👉 GitHub
🔥18👍52
💪 Уровни в айти-индустрии обычно отличаются опытом, знаниями, навыками, ответственностью и зарплатой. Но в одной компании вас могут оценить как сильного мидла, а в другой — как среднего джуна.

💬 Как вы считаете, какими навыками должны обладать джуны, мидлы и сеньоры?

#холивар
🤔3🥱3
🤯Многие распространенные приложения на основе LLM, такие как RAG (Retrival Augmented Generation), имеют некоторые проблемы с пайплайном данных, и Go действительно хорош в этом.

⚒️Реализация RAG на Go очень проста — смотрите пример в блоге Eli Bendersky или на GitHub.
👍2🥱2
📌По мотивам поста в сабреддите golang:

🔧 Kubernetes: автоматизация развертывания, масштабирования и управления контейнеризированными приложениями
🔧 Terraform: управление внешними ресурсами
🔧Hugo: генерация статических сайтов
🔧 Syncthing: непрерывная синхронизация файлов
🔧 Prometheus: система мониторинга и оповещения о событиях, хранящая данные в виде временных рядов
🔧 RudderStack: сбор данных о клиентах из различных приложений, веб-сайтов и SaaS-платформ
🔧 frp: быстрый реверс-прокси
🔧 fzf: нечеткий поиск в командной строке
🔧 act: локальный запуск GitHub Actions
🔧 Gogs: self-hosted сервис Git
🔧 gitea: легковесная DevOps-платформа
🔧 Minio: высокопроизводительное хранилище объектов для ИИ
🔧 tidb: облачная распределенная БД, совместимая с MySQL
🔧 Photoprism: работа с изображениями на базе ИИ
🔧 Gitpod: быстрая и безопасная облачная разработка
🔧 faas: упрощение serverless функций
🔧 nsq: платформа распределенного обмена сообщениями

💭Есть чем дополнить? Пишите в комментарии👇
🔥18👍71
Три паттерна конкурентного кода: гайд для Go-разработчика

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

Именно так получилось у автора статьи. Он встретил логику ограничения потоков выполнения, основанную на результате выполнения функции GOMAXPROCS(0), которая по умолчанию будет равна runtime.NumCPU.

Это подходит под паттерн с параллельными вычислениями на одном процессоре, но использовалось для ограничения количества одновременных запросов к удаленному серверу.

👉 Читать
🔥19👍1👏1
⚡️Николай Тузов выпустил гайд (видео 3,45 ч. + туториал на Хабре) по разработке полноценного gRPC-сервиса с современной архитектурой.

📌Что внутри:

• Разработка простого, но полноценного gRPC-сервиса
• Разбор базовых принципов работы авторизации
• Настройка автоматического деплоя в прод
• Интеграция с уже готовым сервисом URL Shortener
• Разработка полноценных функциональных тестов и многое другое
46👍14🔥64
🎥 Теории кэширования по полочкам: запись урока от Владимира Балуна

📌Что внутри:

01:03 — Что такое кэширование
03:18 — Основные термины кэширования
04:55 — Какие данные кэшировать
06:02 — Кэширование ошибок
07:13 — Как предотвратить cache miss attack
10:34 — Эффективность кэширования
12:56 — Внутреннее кэширование
14:41 — Внешнее кэширование
19:23 — Cache Aside
21:32 — Cache Through
23:16 — Cache Ahead
29:33 — Алгоритмы вытеснения данных из кэша
30:01 — Random алгоритм
30:23 — FIFO алгоритм
30:49 — LIFO алгоритм
31:16 — LRU алгоритм
32:06 — MRU алгоритм
32:29 — LFU алгоритм
37:11 — Алгоритм Белади (OPT)
38:13 — Second Chance алгоритм
39:56 — Clock алгоритм
40:40 — 2Q алгоритм
41:42 — SLRU алгоритм
42:49 — TLRU алгоритм
43:17 — LRU-k алгоритм
47:24 — Инвалидация данных в кэше
47:41 — Инвалидация по TTL
48:35 — Jitter
49:40 — Thundering herd problem
51:13 — Инвалидация по событию
52:41 — Версионирование кэша
56:11 — Тегирование кэша
1:03:37 — Многомерный кэш
🔥68👍101
💡Аксиомы каналов Go: по мотивам статьи 2014 года от Dave Cheney

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

1️⃣ Отправка в nil канал блокируется навсегда.
2️⃣ Чтение из nil канала блокируется навсегда.
3️⃣ Отправка в закрытый канал вызывает панику.
4️⃣ Чтение из закрытого канала возвращает нулевое значение.

#вопросы_с_собесов
👍23
🎲 bgammon — нарды в вашем браузере без рекламы и СМС

Это не только онлайн-версия классической игры, но и игра с открытым исходным кодом, написанная на Go с использованием Ebitengine.

👉 Посмотреть код: бэкэнд & фронт
👍26🤔5🌚2😁1
Вакансия: Java Software Engineer
Локация: удаленно

Bennudata — стартап, с инвестициями от университета Berkeley, мы строим новое решение для автоматизации процесса Disaster Recovery в public clouds (AWS, Azure, GCP).

Задачи:
▪️Проектирование, разработка и тестирование микросервисов
▪️Проектирование и реализация контрактов API
▪️Глубокое погружение в работу сервисов AWS

Требования:
▪️Практический опыт разработки на Java Core более 3-х лет
▪️Опыт работы с Spring Boot
▪️Знание и опыт работы с базами данных MongoDB
▪️Опыт работы с распределенными системами на основе GraphQL и gRPC
▪️Знание и опыт работы с AWS сервисами - EC2, RDS, IAM, S3, VPC, EKS, EBS, Lambda, SNS, SQS.
▪️Знание и использование AWS API и AWS CLI для автоматизации развертывания и управления приложениями на AWS.
▪️Опыт работы с Kubernetes
▪️Понимание и опыт работы с архитектурой микросервисов
▪️Навыки юнит-тестирования - умение писать и запускать автоматические тесты для проверки функциональности кода
▪️English - чтение документации
▪️Русский - разговорный

Желательно:
▪️Знание и опыт использования Terraform

Что мы предлагаем:
▪️3500$+
▪️Remote, full-time
▪️Опционная программа
▪️Возможность релокации в US (виза H-1B)

Резюме на dg@bennudata.com или t.me/gorbunov_me
🥱17🤔1🌚1
Интеграционное тестирование REST API на базе MongoDB с Go

Простой гайд с примерами на Go, который включает проектирование простого API и модели базы данных, описание эндпоинтов, разработку интеграционных тестов, использование Testcontainers и реализацию тестов на Go с использованием apitest.

👉 Читать
👍17
🧰 SCS — Go-библиотека для управления HTTP-сессиями в веб-приложениях от Alex Edwards. Недавно была выпущена версия 2.7.0.

📌 Основные возможности и преимущества:

Автоматическая загрузка и сохранение данных сессии через middleware: облегчает работу с сессиями, автоматизируя их управление.
Выбор из 19 различных серверных хранилищ сессий, включая PostgreSQL, MySQL, MSSQL, SQLite, Redis и многие другие. Также поддерживаются кастомные хранилища сессий.
Поддержка multiple sessions per request, 'flash' messages, session token regeneration, idle, absolute session timeouts и функционал «запомнить меня».
Простота расширения и настройки: возможность обмена токенами сессии с клиентами через HTTP-заголовки или тело запросов/ответов.
Эффективный дизайн: легковесная, быстрая и использует меньше памяти, чем gorilla/sessions.

👉 GitHub

#инструменты
👍74
🤔 Зачем писать свой велосипед? Возьми готовую либу и пользуйся! За тебя уже все написали

Вы наверняка слышали эту фразу от других разработчиков. Наличие инструмента/проекта/библиотеки для любой задачи — это одновременно как достоинство, так и недостаток современной разработки.

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

💬 А как в вашей команде обстоят дела со сторонними библиотеками? По каким критериям вы принимаете решение о внедрении их в проект?

#холивар
13👍1
🥵 7 типов «сложных» разработчиков

Как найти подход к таким «сложным» типам и сделать работу в команде более эффективной и приятной? Рассказываем в статье, как с ними работать, чтобы избежать конфликтов и достичь общих целей.

Читать статью

#почитать
👍3🔥1
💡Futures в Go — абстракция, представляющая результат асинхронной операции, который станет доступным в будущем.

В Go, для создания подобного поведения, обычно используются следующие компоненты: горутины и каналы.

1️⃣ Создаем канал, который будет содержать будущий результат:
resultChan := make(chan int)

2️⃣ Запускаем горутину для асинхронного вычисления результата:
go func() {
resultChan <- doLongComputation()
}()

3️⃣ Читаем из канала позже для получения результата:
result := <-resultChan
👍21🥱19