设计

如何通过“功能选项”来设计友好的 API

TT
场景假设 你作为公司的顶梁柱,要编写一个服务器组件 阶段一:上手就撸版本 type Server struct { listener net.Listener } func (s *Server) Addr() net.Addr func (s *Server) Shutdown() func NewServer(addr string) (*Server, error) { l, err := net.Listen("tcp", addr) if err != nil { return nil, err } srv := Server{listener: l} go srv.run() return &srv, nil } 优点 三分钟即可上线,啥都不管,无脑 NewServer() 就完事了 缺点 一切皆为默认,想要定制是不可能的 阶段二:巨多参数版本 新的需求来了: 我要限制最大连接数 我要设置超时时间 我要设置 tls 证书 我要我还要…… 那就增加点参数,整个可配置版吧 // NewServer returns a new Server listening on addr.