Go选项模式
场景
模拟服务器配置初始化
模式优点
避免形参过长
套路
- 先初始化写死的配置
- options一个个调用
- 确保一次没有的参数进行默认赋值
代码
package main
import "fmt"
const (
	_defaultTime = 3
)
type options func(server *Server)
type Server struct {
	Addr string
	overTime int
}
func NewServer(addr string, opts ...options) *Server {
	var s Server
	s.Addr = addr
	for _, opt := range opts {
		opt(&s)
	}
	ensure(&s)
	return &s
}
func WithTime(t int) options {
	return func(server *Server) {
		server.overTime = t
	}
}
func ensure(s *Server)  {
	if s.overTime == 0 {
		s.overTime = _defaultTime
	}
}
func main()  {
	s1 := NewServer("0.0.0.0:3000")
	fmt.Println(s1)
	s2 := NewServer("0.0.0.0:3000", WithTime(6))
	fmt.Println(s2)
}
拓展性
类似于
func WithTime(t int) options {
	return func(server *Server) {
		server.overTime = t
	}
}
可以无限拓展,但是保证结构体里面有属性
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号