select
, если можно просто читать из каналаВ Go оператор
select
switch
С его помощью можно:
• Управлять конкурентными потоками без блокировок
• Не блокироваться, если добавить
default
select {
case msg := <-ch1:
fmt.Println("Received from ch1:", msg)
case ch2 <- 42:
fmt.Println("Sent 42 to ch2")
default:
fmt.Println("Nothing ready")
}
Если
ch1
или ch2
готовы Если ни один канал не активен
default
select
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤2🤔1
Singleton может мешать тестированию
type Storage interface {
Get(key string) string
}
func ProcessData(s Storage) { ... }
// В тестовых сборках
func resetSingleton() {
instance = nil
once = sync.Once{}
}
❕Warning
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🤔1
select
выбирает случайноОдно из важных свойств
select
в Go select {
case msg := <-ch1:
fmt.Println("ch1:", msg)
case msg := <-ch2:
fmt.Println("ch2:", msg)
}
Если и
ch1
, и ch2
доступны Это исключает жёсткий приоритет каналов
Это нужно для предотвращения "голодания"
Please open Telegram to view this post
VIEW IN TELEGRAM
😁9👍3🌚2
Отношение happens-before гарантирует
Please open Telegram to view this post
VIEW IN TELEGRAM
😁2🎉1
Оцените их по шкале 🔥,❤️,👍,😢, 🥱,
где 🔥 — это супер, а 🥱 — это скучно.
Также приветствуется фидбек в комментариях.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🔥10😢7❤4👾1
Redis поддерживает два механизма сохранения данных:
Эти два метода
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3
Go-сервис генерирует логи, но вы теряетесь в поиске и анализе?
Хотите научиться строить быстрый и надёжный поиск по данным микросервисов?
📅 17 июля в 20:00 (МСК) — открытый урок «Взаимодействие микросервиса на Go и Elasticsearch»
Разберём:
▪️ Архитектуру микросервисов на Go и ключевые нюансы
▪️ Базовые принципы работы с Elasticsearch
▪️ Интеграцию Go-сервиса с Elasticsearch для логирования и поиска
▪️ Настройку индексов, фильтрацию и агрегации
Представьте, что вы разворачиваете микросервис, подключаете его к Elasticsearch, логируете события и выдаёте мгновенный полнотекстовый поиск по данным. Ваш сервис становится прозрачным и управляемым.
🚀 Регистрируйтесь на урок «Взаимодействие микросервиса на Go и Elasticsearch»: https://clc.to/sTcjRQ
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Хотите научиться строить быстрый и надёжный поиск по данным микросервисов?
📅 17 июля в 20:00 (МСК) — открытый урок «Взаимодействие микросервиса на Go и Elasticsearch»
Разберём:
▪️ Архитектуру микросервисов на Go и ключевые нюансы
▪️ Базовые принципы работы с Elasticsearch
▪️ Интеграцию Go-сервиса с Elasticsearch для логирования и поиска
▪️ Настройку индексов, фильтрацию и агрегации
Представьте, что вы разворачиваете микросервис, подключаете его к Elasticsearch, логируете события и выдаёте мгновенный полнотекстовый поиск по данным. Ваш сервис становится прозрачным и управляемым.
🚀 Регистрируйтесь на урок «Взаимодействие микросервиса на Go и Elasticsearch»: https://clc.to/sTcjRQ
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
sync/atomic
Атомарная операция
Store
Load
той же переменной Инициализация
main()
, что Please open Telegram to view this post
VIEW IN TELEGRAM
Паттерн «Функциональные опции»
Этот подход идеален,
Пример
type Server struct {
host string
port int
protocol string
}
func NewServer(host string, port int) *Server {
return &Server{host: host, port: port, protocol: "http"}
}
Реализация функциональных опций
type ServerOption func(*Server)
func WithPort(port int) ServerOption {
return func(s *Server) {
s.port = port
}
}
NewServer
:func NewServer(host string, opts ...ServerOption) *Server {
server := &Server{host: host, port: 443, protocol: "https"}
for _, opt := range opts {
opt(server)
}
return server
}
Теперь можно
server1 := NewServer("localhost") // с портом по умолчанию
server2 := NewServer("localhost", WithPort(8080)) // с портом 8080
Этот подход позволяет добавлять параметры
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🤔5