-
Notifications
You must be signed in to change notification settings - Fork 4
/
options.go
123 lines (106 loc) · 2.21 KB
/
options.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/*
* @Author: lwnmengjing
* @Date: 2021/6/8 2:15 下午
* @Last Modified by: lwnmengjing
* @Last Modified time: 2021/6/8 2:15 下午
*/
package listener
import (
"net/http"
"time"
)
// Option 参数设置类型
type Option func(*options)
type options struct {
name, addr, certFile, keyFile string
handler http.Handler
startedHook func()
endHook func()
timeout time.Duration
metrics bool
healthz bool
readyz bool
pprof bool
}
func setDefaultOption() options {
return options{
name: "http",
addr: ":5000",
timeout: 10 * time.Second,
handler: http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
w.WriteHeader(http.StatusOK)
}),
}
}
// WithName set name
func WithName(name string) Option {
return func(o *options) {
o.name = name
}
}
// WithMetrics set metrics
func WithMetrics(enable bool) Option {
return func(o *options) {
o.metrics = enable
}
}
// WithHealthz set healthz
func WithHealthz(enable bool) Option {
return func(o *options) {
o.healthz = enable
}
}
// WithReadyz set readyz
func WithReadyz(enable bool) Option {
return func(o *options) {
o.readyz = enable
}
}
// WithPprof set pprof
func WithPprof(enable bool) Option {
return func(o *options) {
o.pprof = enable
}
}
// WithEndHook set EndHook
func WithEndHook(f func()) Option {
return func(o *options) {
o.endHook = f
}
}
// WithStartedHook 设置启动回调函数
func WithStartedHook(f func()) Option {
return func(o *options) {
o.startedHook = f
}
}
// WithAddr 设置addr
func WithAddr(s string) Option {
return func(o *options) {
o.addr = s
}
}
// WithHandler 设置handler
func WithHandler(handler http.Handler) Option {
return func(o *options) {
o.handler = handler
}
}
// WithCert 设置cert
func WithCert(s string) Option {
return func(o *options) {
o.certFile = s
}
}
// WithKey 设置key
func WithKey(s string) Option {
return func(o *options) {
o.keyFile = s
}
}
// WithTimeout 设置timeout
func WithTimeout(t int) Option {
return func(o *options) {
o.timeout = time.Second * time.Duration(t)
}
}