Documentation ¶
Overview ¶
包gcmd提供控制台操作,如读取选项/参数和运行命令。 md5:bb72337a704c599f
Index ¶
- Constants
- func BuildOptions(m map[string]string, prefix ...string) string
- func GetArg(index int, def ...string) *gvar.X结构_泛型类
- func GetArgAll() []string
- func GetOpt(name string, def ...string) *gvar.X结构_泛型类
- func GetOptAll() map[string]string
- func GetOptWithEnv(key string, def ...interface{}) *gvar.X结构_泛型类
- func Init(args ...string)
- func Scan(info ...interface{}) string
- func Scanf(format string, info ...interface{}) string
- type X函数类型_FuncWithValue
- type X函数类型_Function
- type X结构_Argument
- type X结构_Command
- func (c *X结构_Command) AddCommand(commands ...*X结构_Command) error
- func (c *X结构_Command) AddObject(objects ...interface{}) error
- func (c *X结构_Command) Print()
- func (c *X结构_Command) PrintTo(writer io.Writer)
- func (c *X结构_Command) Run(ctx context.Context)
- func (c *X结构_Command) RunWithError(ctx context.Context) (err error)
- func (c *X结构_Command) RunWithSpecificArgs(ctx context.Context, args []string) (value interface{}, err error)
- func (c *X结构_Command) RunWithValue(ctx context.Context) (value interface{})
- func (c *X结构_Command) RunWithValueError(ctx context.Context) (value interface{}, err error)
- type X结构_Parser
- type X结构_ParserOption
Examples ¶
Constants ¶
const ( X常量_CtxKeyParser gctx.X类型_StrKey = `CtxKeyParser` X常量_CtxKeyCommand gctx.X类型_StrKey = `CtxKeyCommand` X常量_CtxKeyArgumentsIndex gctx.X类型_StrKey = `CtxKeyArgumentsIndex` )
Variables ¶
This section is empty.
Functions ¶
func BuildOptions ¶
BuildOptions 将选项构建为字符串。 md5:c722b017f3a50346
func GetArg ¶
GetArg 作为gvar.Var返回索引为`index`的参数。 md5:12ea2f8d74c6370d
Example ¶
package main import ( "fmt" gcmd "gitee.com/go_888/goframe/os/gcmd" ) func main() { gcmd.Init("gf", "build", "main.go", "-o=gf.exe", "-y") fmt.Printf( `Arg[0]: "%v", Arg[1]: "%v", Arg[2]: "%v", Arg[3]: "%v"`, gcmd.GetArg(0), gcmd.GetArg(1), gcmd.GetArg(2), gcmd.GetArg(3), ) }
Output: Arg[0]: "gf", Arg[1]: "build", Arg[2]: "main.go", Arg[3]: ""
func GetArgAll ¶
func GetArgAll() []string
GetArgAll 返回所有解析的参数。 md5:85cc0fd5995d4878
Example ¶
package main import ( "fmt" gcmd "gitee.com/go_888/goframe/os/gcmd" ) func main() { gcmd.Init("gf", "build", "main.go", "-o=gf.exe", "-y") fmt.Printf(`%#v`, gcmd.GetArgAll()) }
Output: []string{"gf", "build", "main.go"}
func GetOpt ¶
GetOpt 作为gvar.Var返回名为`name`的选项值。 md5:1859b868ee779be0
Example ¶
package main import ( "fmt" gcmd "gitee.com/go_888/goframe/os/gcmd" ) func main() { gcmd.Init("gf", "build", "main.go", "-o=gf.exe", "-y") fmt.Printf( `Opt["o"]: "%v", Opt["y"]: "%v", Opt["d"]: "%v"`, gcmd.GetOpt("o"), gcmd.GetOpt("y"), gcmd.GetOpt("d", "default value"), ) }
Output: Opt["o"]: "gf.exe", Opt["y"]: "", Opt["d"]: "default value"
func GetOptAll ¶
GetOptAll 返回所有已解析的选项。 md5:6de4d266d8991786
Example ¶
package main import ( "fmt" gcmd "gitee.com/go_888/goframe/os/gcmd" ) func main() { gcmd.Init("gf", "build", "main.go", "-o=gf.exe", "-y") fmt.Printf(`%#v`, gcmd.GetOptAll()) // May Output: // map[string]string{"o":"gf.exe", "y":""} }
Output:
func GetOptWithEnv ¶
GetOptWithEnv 返回指定 `key` 的命令行参数。 如果该参数不存在,则返回指定 `key` 的环境变量。 如果两者都不存在,它将返回默认值 `def`。
获取规则: 1. 命令行参数采用小写格式,例如:gf.`包名`.<变量名>; 2. 环境变量采用大写格式,例如:GF_`包名`_<变量名>。 md5:e3d5c0c773430740
Example ¶
package main import ( "fmt" gcmd "gitee.com/go_888/goframe/os/gcmd" genv "gitee.com/go_888/goframe/os/genv" ) func main() { fmt.Printf("Opt[gf.test]:%s\n", gcmd.GetOptWithEnv("gf.test")) _ = genv.X设置值("GF_TEST", "YES") fmt.Printf("Opt[gf.test]:%s\n", gcmd.GetOptWithEnv("gf.test")) }
Output: Opt[gf.test]: Opt[gf.test]:YES
func Init ¶
func Init(args ...string)
Init 进行自定义初始化。 md5:08f8a2052942d9c8
Example ¶
package main import ( "fmt" gcmd "gitee.com/go_888/goframe/os/gcmd" ) func main() { gcmd.Init("gf", "build", "main.go", "-o=gf.exe", "-y") fmt.Printf(`%#v`, gcmd.GetArgAll()) }
Output: []string{"gf", "build", "main.go"}
func Scan ¶
func Scan(info ...interface{}) string
Scan 将 `info` 打印到标准输出,读取并返回用户输入,直到遇到 '\n'。 md5:ddd0cd56978ea021
Example ¶
package main import ( "fmt" gcmd "gitee.com/go_888/goframe/os/gcmd" ) func main() { fmt.Println(gcmd.Scan("gf scan")) }
Output: gf scan
Types ¶
type X函数类型_FuncWithValue ¶
type X函数类型_FuncWithValue func(ctx context.Context, parser *X结构_Parser) (out interface{}, err error)
X函数类型_FuncWithValue 类似于 Func,但它带有输出参数,这些参数可以与命令调用者进行交互。 md5:e8459756fad8cbb9
type X函数类型_Function ¶
type X函数类型_Function func(ctx context.Context, parser *X结构_Parser) (err error)
X函数类型_Function 是一个绑定到特定参数的自定义命令回调函数。 md5:74f820cae660a1b5
type X结构_Argument ¶
type X结构_Argument struct { Name string // Option name. Short string // Option short. Brief string // 这个选项的简要信息,用于帮助信息中。 md5:b913553040a0d889 IsArg bool // IsArg 标记这个参数从命令行参数而不是选项中获取值。 md5:24e6cc6cb658557a Orphan bool // 此选项是否有值与之绑定。 md5:bc1b6ee078e2683c }
X结构_Argument 是某些命令使用的命令值。 md5:e5c110dcf519025a
type X结构_Command ¶
type X结构_Command struct { Name string // 命令名称(大小写敏感)。 md5:44e7c13c9c0eced2 Usage string // 关于其用途的简短描述,例如:gf build main.go [选项]. md5:e2660484a0edfee8 Brief string // 一个简短的描述,说明此命令将执行的操作。 md5:4a0304d2ac452238 Description string // 一个详细的描述。 md5:b83b3d2318b54bce Arguments []X结构_Argument // 参数数组,配置此命令的行为。 md5:9c82b0f6e377e648 Func X函数类型_Function // Custom function. FuncWithValue X函数类型_FuncWithValue // 自定义函数,带有输出参数,能够与命令调用者进行交互。 md5:586037addaa736f6 HelpFunc X函数类型_Function // Custom help function Examples string // Usage examples. Additional string // 关于此命令的附加信息,将追加到帮助信息的末尾。 md5:328b9830bf970895 Strict bool // 严格的解析选项,这意味着如果提供无效的选项,它会返回错误。 md5:5e8eec207aef7c7a CaseSensitive bool // 区分大小写的解析选项,这意味着它以区分大小写的方式解析输入选项。 md5:b18eddb5f60c7176 Config string // 配置节点名称,它也会从配置组件中获取值,以及从命令行中获取。 md5:0f67ea7288e8e541 // contains filtered or unexported fields }
X结构_Command 包含有关可以处理自定义逻辑的参数的信息。 md5:b0e0f23cc6e868c5
func CommandFromCtx ¶
func CommandFromCtx(ctx context.Context) *X结构_Command
CommandFromCtx从上下文检索并返回Command。 md5:81a6b36fc029401b
Example ¶
package main import ( "context" "fmt" gcmd "gitee.com/go_888/goframe/os/gcmd" gctx "gitee.com/go_888/goframe/os/gctx" ) func main() { var ( command = gcmd.X结构_Command{ Name: "start", } ) ctx := context.WithValue(gctx.X创建(), gcmd.X常量_CtxKeyCommand, &command) unAddCtx := context.WithValue(gctx.X创建(), gcmd.X常量_CtxKeyCommand, &gcmd.X结构_Command{}) nonKeyCtx := context.WithValue(gctx.X创建(), "Testkey", &gcmd.X结构_Command{}) fmt.Println(gcmd.CommandFromCtx(ctx).Name) fmt.Println(gcmd.CommandFromCtx(unAddCtx).Name) fmt.Println(gcmd.CommandFromCtx(nonKeyCtx) == nil) }
Output: start true
func NewFromObject ¶
func NewFromObject(object interface{}) (rootCmd *X结构_Command, err error)
NewFromObject 使用给定的对象创建并返回一个根命令对象。 md5:3bdd362e3ec9f337
func (*X结构_Command) AddCommand ¶
func (c *X结构_Command) AddCommand(commands ...*X结构_Command) error
AddCommand向当前命令添加一个或多个子命令。 md5:f1582e4eafa78dd7
func (*X结构_Command) AddObject ¶
func (c *X结构_Command) AddObject(objects ...interface{}) error
AddObject 通过struct对象向当前命令添加一个或多个子命令。 md5:8de76f64f667f83d
func (*X结构_Command) Print ¶
func (c *X结构_Command) Print()
Print 将当前命令的帮助信息打印到标准输出(stdout)。 md5:f96bdfd3fe6f19a6
func (*X结构_Command) PrintTo ¶
func (c *X结构_Command) PrintTo(writer io.Writer)
PrintTo 将帮助信息打印到自定义的io.Writer。 md5:bd4a5ae4f69d2d7d
func (*X结构_Command) Run ¶
func (c *X结构_Command) Run(ctx context.Context)
Run 调用与该命令绑定的自定义函数,根据os.Args执行。 如果发生任何错误,它将使进程退出并返回退出代码1。 md5:f6512536eb3555fe
func (*X结构_Command) RunWithError ¶
func (c *X结构_Command) RunWithError(ctx context.Context) (err error)
RunWithError 调用与该命令关联的 os.Args 中的自定义函数,同时输出错误信息。 md5:59f4632a1aab9342
func (*X结构_Command) RunWithSpecificArgs ¶
func (c *X结构_Command) RunWithSpecificArgs(ctx context.Context, args []string) (value interface{}, err error)
RunWithSpecificArgs 使用绑定到该命令的特定参数调用自定义函数,并将值和错误输出传递给它。 md5:48c98cbef4733851
func (*X结构_Command) RunWithValue ¶
func (c *X结构_Command) RunWithValue(ctx context.Context) (value interface{})
RunWithValue 调用与该命令绑定的 os.Args 中的自定义函数,传入值作为输出。如果发生任何错误,它将退出进程并返回退出码 1。 md5:4d204c2503673c10
func (*X结构_Command) RunWithValueError ¶
func (c *X结构_Command) RunWithValueError(ctx context.Context) (value interface{}, err error)
RunWithValueError 使用os.Args中的值调用与此命令关联的自定义函数,并带有值和错误输出。 md5:007ad372fee78f96
type X结构_Parser ¶
type X结构_Parser struct {
// contains filtered or unexported fields
}
X结构_Parser for arguments.
func Parse ¶
func Parse(supportedOptions map[string]bool, option ...X结构_ParserOption) (*X结构_Parser, error)
Parse 创建并返回一个新的Parser,使用os.Args和受支持的选项。
请注意,参数`supportedOptions`是[key: need argument]形式,其中 `supportedOptions`的值项表示相应的选项名是否需要参数。
可选参数`strict`指定如果遇到无效选项时,是否停止解析并返回错误。 md5:136e728aecd2a3b5
Example ¶
package main import ( "fmt" "os" "gitee.com/go_888/goframe/frame/g" gcmd "gitee.com/go_888/goframe/os/gcmd" ) func main() { os.Args = []string{"gf", "build", "main.go", "-o=gf.exe", "-y"} p, err := gcmd.Parse(g.MapStrBool{ "o,output": true, "y,yes": false, }) if err != nil { panic(err) } fmt.Println(p.GetOpt("o")) fmt.Println(p.GetOpt("output")) fmt.Println(p.GetOpt("y") != nil) fmt.Println(p.GetOpt("yes") != nil) fmt.Println(p.GetOpt("none") != nil) fmt.Println(p.GetOpt("none", "Def")) }
Output: gf.exe gf.exe true true false Def
func ParseArgs ¶
func ParseArgs(args []string, supportedOptions map[string]bool, option ...X结构_ParserOption) (*X结构_Parser, error)
ParseArgs 创建并返回一个新的Parser,具有给定的参数和支持的选项。
注意,参数`supportedOptions`是一个[选项名称: 需要参数]的映射,这意味着`supportedOptions`的值项表示对应选项名称是否需要参数。
可选参数`strict`指定是否在遇到无效选项时停止解析并返回错误。 md5:5c367c6c4d6d78be
Example ¶
package main import ( "fmt" gcmd "gitee.com/go_888/goframe/os/gcmd" ) func main() { p, _ := gcmd.ParseArgs([]string{ "gf", "--force", "remove", "-fq", "-p=www", "path", "-n", "root", }, nil) fmt.Println(p.GetArgAll()) fmt.Println(p.GetOptAll()) }
Output: [gf path] map[force:remove fq: n:root p:www]
func ParserFromCtx ¶
func ParserFromCtx(ctx context.Context) *X结构_Parser
ParserFromCtx 从上下文中检索并返回解析器。 md5:260bf6b7d06ebc7c
Example ¶
package main import ( "context" "fmt" gcmd "gitee.com/go_888/goframe/os/gcmd" gctx "gitee.com/go_888/goframe/os/gctx" ) func main() { parser, _ := gcmd.Parse(nil) ctx := context.WithValue(gctx.X创建(), gcmd.X常量_CtxKeyParser, parser) nilCtx := context.WithValue(gctx.X创建(), "NilCtxKeyParser", parser) fmt.Println(gcmd.ParserFromCtx(ctx).GetArgAll()) fmt.Println(gcmd.ParserFromCtx(nilCtx) == nil) }
Output: [gf build main.go] true
func (*X结构_Parser) GetArg ¶
func (p *X结构_Parser) GetArg(index int, def ...string) *gvar.X结构_泛型类
GetArg 作为gvar.Var返回索引为`index`的参数。 md5:12ea2f8d74c6370d
func (*X结构_Parser) GetArgAll ¶
func (p *X结构_Parser) GetArgAll() []string
GetArgAll 返回所有解析的参数。 md5:85cc0fd5995d4878
func (*X结构_Parser) GetOpt ¶
func (p *X结构_Parser) GetOpt(name string, def ...interface{}) *gvar.X结构_泛型类
GetOpt 作为gvar.Var返回名为`name`的选项值。 md5:1859b868ee779be0
func (*X结构_Parser) GetOptAll ¶
func (p *X结构_Parser) GetOptAll() map[string]string
GetOptAll 返回所有已解析的选项。 md5:6de4d266d8991786
func (X结构_Parser) MarshalJSON ¶
func (p X结构_Parser) MarshalJSON() ([]byte, error)
MarshalJSON 实现了接口 MarshalJSON 以供 json.Marshal 使用。 md5:43c3b36e60a18f9a
type X结构_ParserOption ¶
type X结构_ParserOption struct { CaseSensitive bool // 以区分大小写的方式标记选项解析。 md5:8d9524f23421dc60 Strict bool // 如果传入了无效的选项,是否停止解析并返回错误。 md5:2564adc332d2fd51 }
X结构_ParserOption负责管理解析选项。 md5:6294496b49d5c3bb