-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcommand.go
59 lines (56 loc) · 1.05 KB
/
command.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
package gogtp
import (
"strings"
)
type cmdOptions struct {
ID int
Name string
Args []string
End bool
}
//CmdOption 命令设置函数
type CmdOption func(option *cmdOptions)
//CmdID 命令ID
func CmdID(id int) CmdOption {
return func(option *cmdOptions) {
option.ID=id
}
}
//CmdName 命令的名称
func CmdName(name string) CmdOption {
return func(option *cmdOptions) {
option.Name=name
}
}
//CmdArgs 命令的参数
func CmdArgs(args ...string)CmdOption {
return func(option *cmdOptions) {
option.Args=args
}
}
//CmdEnd 命令是否自动结束
func CmdEnd(end bool)CmdOption {
return func(option *cmdOptions) {
option.End=end
}
}
//ToString 获取命令执行字符串
func (c *cmdOptions) ToString() string {
sb := strings.Builder{}
if c.ID != 0 {
sb.WriteString(string(c.ID))
}
sb.WriteString(c.Name + " ")
sb.WriteString(strings.Join(c.Args, " "))
return sb.String()
}
//BuildCommand 命令构建器
func BuildCommand(options ...CmdOption) cmdOptions {
op:=cmdOptions{
End:true,
}
for _,v:=range options{
v(&op)
}
return op
}