golang设计模式(五)function option

好处是配置可选,直观
type Server struct {
	Addr string
	Port int
	protocol string
	Timeout  time.Duration
	MaxConn int
	TLS    *tls.Config
}

type option func(*Server)

func NewServer(addr string,port int, option2 ...option)Server{
	s := Server{
		Addr :addr,
		Port: port,
	}
	for _,o := range option2{
		o(&s)
	}
	return s
}

func Protocol(protocol string)option{
	return func(server *Server) {
		server.protocol = protocol
	}
}

func Timeout(timeout time.Duration)option{
	return func(server *Server) {
		server.Timeout = timeout
	}
}

func MaxConn(maxconn int)option{
	return func(server *Server) {
		server.MaxConn = maxconn
	}
}

func TlsConfig(config *tls.Config)option{
	return func(server *Server) {
		server.TLS = config
	}
}

func main(){
	server := NewServer("localhost", 8080, Protocol("http"), Timeout(60))
	fmt.Println(server)
}
posted @ 2022-02-24 20:25  故意写bug  阅读(141)  评论(0)    收藏  举报