Прочитал статью про различные способы инициализации структуры и вспомнил про другую от Dave Cheney.
<aside> 💡 Если бы мне давали доллар каждый раз, когда я цитирую Дейва, я бы ещё чаще его цитировал...
</aside>
<aside> 💡 Ниже — недословный, но в меру точный пересказ поста, своего рода конспект (да и весь канал на самом деле для меня является конспектом).
</aside>
Что имеем на входе:
type Server struct {
listener net.Listener
}
func (s *Server) Addr() net.Addr
func (s *Server) Shutdown()
func NewServer(addr string) (*Server, error)
Пока что все выглядит достаточно аккуратно и невинно, но совсем скоро нам захотелось:
func NewServer(addr string, clientTimeout time.Duration, maxconns, maxconcurrent int, cert *tls.Cert)
(и в этот момент Дейв просит аудиторию поднять руки тех, кто тоже писал/использовал подобные API 🙂)
Что здесь не так:
maxconcurrent может принять дефолтное значение для типа (то есть, 0). Не станет ли это проблемой?