Прочитал статью про различные способы инициализации структуры и вспомнил про другую от 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 🙂)

Что здесь не так: