💡Различные способы использования go get
🔸Вы, конечно, знаете, как получить последнюю версию модуля:
Либо для конкретного модуля...
...либо для всех зависимостей главного модуля:
🔸Чтобы обновить все зависимости до последних патч-релизов текущей версии, используйте:
🔸Но это еще не все. Например, вы можете обновить или понизить версию модуля до конкретной версии:
🔸Вы не ограничены использованием семантического номера версии. Вы можете использовать
🔸Например, эта команда обновит модуль до последнего коммита в главной ветке модуля:
🔸Вы даже можете удалить зависимость. Эта операция даже понижает версии модулей:
🔸Команда
🔸Начиная с Go 1.21,
🔸Вы, конечно, знаете, как получить последнюю версию модуля:
Либо для конкретного модуля...
$ 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.
#новости
👉 Речь про этот proposal.
#новости
🔥26👍3
🧰cpuid — библиотека, которая предоставляет информацию о ЦП без использования CGO: количество физических и логических ядер, семейство ЦП и другие сведения.
☑️На данный момент поддерживает x86/x64 и Arm64. Не использует никакого CGO.
👉 GitHub
☑️На данный момент поддерживает 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
GitHub
GitHub - klauspost/cpuid: CPU feature identification for Go
CPU feature identification for Go. Contribute to klauspost/cpuid development by creating an account on GitHub.
🔥18👍5❤2
💪 Уровни в айти-индустрии обычно отличаются опытом, знаниями, навыками, ответственностью и зарплатой. Но в одной компании вас могут оценить как сильного мидла, а в другой — как среднего джуна.
💬 Как вы считаете, какими навыками должны обладать джуны, мидлы и сеньоры?
#холивар
💬 Как вы считаете, какими навыками должны обладать джуны, мидлы и сеньоры?
#холивар
🤔3🥱3
🤯Многие распространенные приложения на основе LLM, такие как RAG (Retrival Augmented Generation), имеют некоторые проблемы с пайплайном данных, и Go действительно хорош в этом.
⚒️Реализация RAG на Go очень проста — смотрите пример в блоге Eli Bendersky или на GitHub.
⚒️Реализация 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: платформа распределенного обмена сообщениями
💭Есть чем дополнить? Пишите в комментарии👇
🔧 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👍7❤1
⚙Три паттерна конкурентного кода: гайд для Go-разработчика
Часто для погружения в ту или иную тему необходима мотивация — например, можно в проекте увидеть странное поведение кода, которое вызывает больше вопросов, чем ответов.
Именно так получилось у автора статьи. Он встретил логику ограничения потоков выполнения, основанную на результате выполнения функции
Это подходит под паттерн с параллельными вычислениями на одном процессоре, но использовалось для ограничения количества одновременных запросов к удаленному серверу.
👉 Читать
Часто для погружения в ту или иную тему необходима мотивация — например, можно в проекте увидеть странное поведение кода, которое вызывает больше вопросов, чем ответов.
Именно так получилось у автора статьи. Он встретил логику ограничения потоков выполнения, основанную на результате выполнения функции
GOMAXPROCS(0)
, которая по умолчанию будет равна runtime.NumCPU
. Это подходит под паттерн с параллельными вычислениями на одном процессоре, но использовалось для ограничения количества одновременных запросов к удаленному серверу.
👉 Читать
🔥19👍1👏1
⚡️Николай Тузов выпустил гайд (видео 3,45 ч. + туториал на Хабре) по разработке полноценного gRPC-сервиса с современной архитектурой.
📌Что внутри:
• Разработка простого, но полноценного gRPC-сервиса
• Разбор базовых принципов работы авторизации
• Настройка автоматического деплоя в прод
• Интеграция с уже готовым сервисом URL Shortener
• Разработка полноценных функциональных тестов и многое другое
📌Что внутри:
• Разработка простого, но полноценного gRPC-сервиса
• Разбор базовых принципов работы авторизации
• Настройка автоматического деплоя в прод
• Интеграция с уже готовым сервисом URL Shortener
• Разработка полноценных функциональных тестов и многое другое
⚡46👍14🔥6❤4
🎥 Теории кэширования по полочкам: запись урока от Владимира Балуна
📌Что внутри:
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 — Многомерный кэш
📌Что внутри:
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👍10❤1
💡Аксиомы каналов Go: по мотивам статьи 2014 года от Dave Cheney
Каналы являются довольно простой концепцией, пока вы не столкнетесь с некоторыми менее интуитивно понятными поведениями каналов, особенно когда речь идет о закрытых или nil каналах.
1️⃣ Отправка в nil канал блокируется навсегда.
2️⃣ Чтение из nil канала блокируется навсегда.
3️⃣ Отправка в закрытый канал вызывает панику.
4️⃣ Чтение из закрытого канала возвращает нулевое значение.
#вопросы_с_собесов
Каналы являются довольно простой концепцией, пока вы не столкнетесь с некоторыми менее интуитивно понятными поведениями каналов, особенно когда речь идет о закрытых или nil каналах.
1️⃣ Отправка в nil канал блокируется навсегда.
2️⃣ Чтение из nil канала блокируется навсегда.
3️⃣ Отправка в закрытый канал вызывает панику.
4️⃣ Чтение из закрытого канала возвращает нулевое значение.
#вопросы_с_собесов
👍23
Вакансия: 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
Локация: удаленно
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
Telegram
Dmitrii Gorbunov
You can contact @gorbunov_me right away.
🥱17🤔1🌚1
Интеграционное тестирование REST API на базе MongoDB с Go
Простой гайд с примерами на Go, который включает проектирование простого API и модели базы данных, описание эндпоинтов, разработку интеграционных тестов, использование Testcontainers и реализацию тестов на Go с использованием apitest.
👉 Читать
Простой гайд с примерами на 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
#инструменты
📌 Основные возможности и преимущества:
⚙ Автоматическая загрузка и сохранение данных сессии через middleware: облегчает работу с сессиями, автоматизируя их управление.
⚙ Выбор из 19 различных серверных хранилищ сессий, включая PostgreSQL, MySQL, MSSQL, SQLite, Redis и многие другие. Также поддерживаются кастомные хранилища сессий.
⚙ Поддержка multiple sessions per request, 'flash' messages, session token regeneration, idle, absolute session timeouts и функционал «запомнить меня».
⚙ Простота расширения и настройки: возможность обмена токенами сессии с клиентами через HTTP-заголовки или тело запросов/ответов.
⚙ Эффективный дизайн: легковесная, быстрая и использует меньше памяти, чем gorilla/sessions.
👉 GitHub
#инструменты
👍7❤4
🤔 Зачем писать свой велосипед? Возьми готовую либу и пользуйся! За тебя уже все написали
Вы наверняка слышали эту фразу от других разработчиков. Наличие инструмента/проекта/библиотеки для любой задачи — это одновременно как достоинство, так и недостаток современной разработки.
С одной стороны, они облегчают жизнь разработчикам и целым командам, а с другой — могут стать источником больших проблем: размер и скорость работы приложения, поддерживаемость кода, время на изучение библиотеки, баги, уязвимости и многое другое.
💬 А как в вашей команде обстоят дела со сторонними библиотеками? По каким критериям вы принимаете решение о внедрении их в проект?
#холивар
Вы наверняка слышали эту фразу от других разработчиков. Наличие инструмента/проекта/библиотеки для любой задачи — это одновременно как достоинство, так и недостаток современной разработки.
С одной стороны, они облегчают жизнь разработчикам и целым командам, а с другой — могут стать источником больших проблем: размер и скорость работы приложения, поддерживаемость кода, время на изучение библиотеки, баги, уязвимости и многое другое.
💬 А как в вашей команде обстоят дела со сторонними библиотеками? По каким критериям вы принимаете решение о внедрении их в проект?
#холивар
❤13👍1
Forwarded from Библиотека задач по Go | тесты, код, задания
Что выведет код?
Anonymous Quiz
42%
0 1 2 3
23%
0 2 4 6
3%
0 2 0 2
11%
Ошибка компиляции
21%
Посмотреть результаты
🥱19👍17🌚6
🥵 7 типов «сложных» разработчиков
Как найти подход к таким «сложным» типам и сделать работу в команде более эффективной и приятной? Рассказываем в статье, как с ними работать, чтобы избежать конфликтов и достичь общих целей.
Читать статью
#почитать
Как найти подход к таким «сложным» типам и сделать работу в команде более эффективной и приятной? Рассказываем в статье, как с ними работать, чтобы избежать конфликтов и достичь общих целей.
Читать статью
#почитать
👍3🔥1
💡Futures в Go — абстракция, представляющая результат асинхронной операции, который станет доступным в будущем.
В Go, для создания подобного поведения, обычно используются следующие компоненты: горутины и каналы.
1️⃣ Создаем канал, который будет содержать будущий результат:
2️⃣ Запускаем горутину для асинхронного вычисления результата:
3️⃣ Читаем из канала позже для получения результата:
В Go, для создания подобного поведения, обычно используются следующие компоненты: горутины и каналы.
1️⃣ Создаем канал, который будет содержать будущий результат:
resultChan := make(chan int)
2️⃣ Запускаем горутину для асинхронного вычисления результата:
go func() {
resultChan <- doLongComputation()
}()
3️⃣ Читаем из канала позже для получения результата:
result := <-resultChan
👍21🥱19