TGViewer
Всё о разработке | Леонид Ченский Всё о разработке | Леонид Ченский @leoscode · 732 subscribers
Post #57 537
👩‍💻 3 МОИХ ЛЮБИМЫХ ШАБЛОНА КОДА В GO

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

1. Функциональные возможности (Functional Options)

Этот шаблон позволяет удобно настраивать параметры структуры или функции с помощью опциональных аргументов. Особенно полезно при создании конструкций с большим количеством настроек (например соединение с БД, брокером и т.д.)

Пример:
// Непубличная конфигурируемая структура опций.
type connectionOptions struct {
maxPoolSize int
readTimeout time.Duration
// ...
}

// Опции как функции
//
// Из-за того, что connectionOptions - не экспортируемая структура, потребители не смогут реализовать данный тип.
type Option func(*connectionOptions)

// Реализация функциональных возможностей
func WithMaxPoolSize(s int) Option {
return func(o *connectionOptions) {
o.maxPoolSize = s
}
}

// Реализация функциональных возможностей
func WithReadTimeout(d time.Duration) Option {
return func(o *connectionOptions) {
o.readTimeout = d
}
}

// Функция инициализации
func NewConnection(address string, opts ...Option) *Connection {
cfg := &connectionOptions {
readTimeout: 60 * time.Second, // значения по-умолчанию
maxPoolSize: 10, // значения по-умолчанию
}

// Тут изящно применяются все наши опции
for _, opt := range opts {
opt(cfg)
}

return &Connection{
address: address,
config: cfg,
}
}

func main() {
conn := NewConnection("127.0.0.1:5432",
WithMaxPoolSize(20),
WithReadTimeout(5*time.Second),
)
// ...
}
  • 🔥 7
  • 👍 4
  • ❤ 2
  • 👀 1
More from @leoscode
  1. Sep 15, 2026Помню как в детстве хотел такого же ассистента как Jarvis у Железного человека. Сейчас буд…
  2. Aug 24, 2026Гипотетическая история Представьте завтра все датацентры «вдруг» перестанут работать. Прив…
  3. Aug 4, 2026"Капризный день"
  4. Jul 17, 2026Пользуюсь случаем, напишу тут: ищу заряжененного Go разработчика к себе в команду. Ссылка…
  5. Jul 14, 2026Утро вторника началось не с кофе… Кто положил, признавайтесь!)
  6. Jul 1, 2026Согласны? 👍 Да 🗿Нет
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →