Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
module.NewServer(
":8080",
module.WithWhitelistedIP("10.0.0.0/8"),
module.Timeout(10 * time.Second),
module.TLS(&TLSConfig{})
)
module.NewServer(&module.ServerOptions{
Bind: ":8080",
Whitelist: module.IPRange("10.0.0.0/8"),
Timeout: 10 * time.Seconds,
TLS: &TLSConfig{}
})
log := logger.New()
cfg, err := parseConfigFromSomewhere()
// handle error
module.NewServer(
cfg,
module.SetLogger(log),
module.TLS(&TLSConfig{}),
)
log := logger.New()
cfg, err := parseConfigFromSomewhere()
// handle error
module.NewServer(
cfg.
SetLogger(log).
SetTLS(&TLSConfig{}),
)
type Config struct {
Bind string
logger *logger.Logger
tls *tls.Config
}
func (c *Config) SetLogger(log *logger.Logger) *Config {
c.logger = log
return c
}
func (c *Config) SetTLS(t *tls.Config) *Config {
c.tls = t
return c
}
type Server struct {
cfg Config
logger *log.Logger
http *http.Server
}
func NewServer(cfg *Config) *Server {
srv := &http.Server{
Addr: cfg.Bind,
TLSConfig: cfg.tls,
}
return &Server{
cfg: *cfg,
logger: cfg.logger,
http: srv,
}
}
(примечание переводчика — блог с оригинальной статьей Дейва Чейни более не существует, не найдя перепечаток я заменил ссылку на статью ссылкой на видео с его доклада)
Функциональные опции на стероидах