- Notifications
You must be signed in to change notification settings - Fork0
clop的静态代码生成版本,适用于对性能要求比较高的场景(目前只是自用)
License
NotificationsYou must be signed in to change notification settings
antlabs/quickclop
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
QuickClop 是clop 的静态代码生成版本,适用于对性能要求比较高的场景。通过静态代码生成,避免了运行时反射带来的性能开销。
- 基于结构体标签自动生成命令行参数解析代码
- 支持短选项和长选项(如
-X; --request
) - 支持各种数据类型,包括基本类型、指针类型、切片类型等
- 自动生成帮助信息
- 按需导入必要的包,优化生成的代码
- 详细的错误处理
更多功能详情请参考FEATURES.md。
go get github.com/antlabs/quickclop
- 定义带有
clop
标签的结构体,并添加:quickclop
注释:
package main// MyApp represents a command-line application with various options.// :quickcloptypeMyAppstruct {Namestring`clop:"-n; --name" usage:"Application name"`Verbosebool`clop:"-v; --verbose" usage:"Enable verbose output"`Files []string`clop:"-f; --file" usage:"Input files"`Outputstring`clop:"args=output" usage:"Output file"`}
- 运行 quickclop 工具生成代码:
quickclop path/to/your/package
- 在你的代码中使用生成的
Parse
和Usage
方法:
funcmain() {app:=&MyApp{}iferr:=app.Parse(os.Args[1:]);err!=nil {fmt.Println(err)app.Usage()os.Exit(1) }// 使用解析后的参数...}
clop:"-s; --long"
- 定义短选项和长选项clop:"args=name"
- 定义命令行位置参数usage:"description"
- 定义选项的描述文本env:"ENV_VAR"
- 定义绑定的环境变量名default:"value"
- 定义选项的默认值
- 基本类型:
string
,int
,float64
,bool
- 指针类型:
*string
,*int
,*float64
,*bool
- 切片类型:
[]string
等 - 更多类型支持正在开发中
QuickClop 支持从环境变量中读取选项值。使用env
标签可以将选项绑定到环境变量:
// :quickcloptypeConfigstruct {Debugbool`clop:"-d; --debug" usage:"启用调试模式" env:"APP_DEBUG"`Portint`clop:"-p; --port" usage:"服务端口" env:"APP_PORT"`Hoststring`clop:"--host" usage:"服务主机" env:"APP_HOST"`}
环境变量的优先级低于命令行参数,即如果同时提供了环境变量和命令行参数,将使用命令行参数的值。
QuickClop 支持为选项设置默认值。使用default
标签可以指定选项的默认值:
// :quickcloptypeConfigstruct {Debugbool`clop:"-d; --debug" usage:"启用调试模式" default:"false"`Portint`clop:"-p; --port" usage:"服务端口" default:"8080"`Hoststring`clop:"--host" usage:"服务主机" default:"localhost"`LogLevelstring`clop:"--log-level" usage:"日志级别" default:"info"`}
默认值的优先级最低,当命令行参数和环境变量都未提供时,将使用默认值。在帮助信息中,默认值会显示在选项描述后面。
QuickClop 支持从配置文件中读取选项值。使用config
标签可以将选项绑定到配置文件中的键:
// :quickcloptypeConfigstruct {Debugbool`clop:"-d; --debug" usage:"启用调试模式" config:"debug"`Portint`clop:"-p; --port" usage:"服务端口" config:"port"`Hoststring`clop:"--host" usage:"服务主机" config:"host"`}
支持的配置文件格式包括:
- JSON (.json)
- YAML (.yaml, .yml)
- TOML (.toml)
使用-c
或--config
选项指定配置文件路径。
QuickClop 支持生成 shell 补全脚本,目前支持 Bash、Zsh 和 Fish。
可以使用completion
标志生成补全脚本:
# 生成所有类型的补全脚本quickclop -i your_file.go -s YourStructName -completion# 生成特定类型的补全脚本quickclop -i your_file.go -s YourStructName -completion -shell bashquickclop -i your_file.go -s YourStructName -completion -shell zshquickclop -i your_file.go -s YourStructName -completion -shell fish
可以使用completion
标签为选项指定补全类型:
// :quickcloptypeOptionsstruct {// 文件补全Inputstring`clop:"-i; --input" usage:"输入文件" completion:"file"`// 目录补全Dirstring`clop:"--dir" usage:"工作目录" completion:"dir"`// 自定义值补全Formatstring`clop:"-f; --format" usage:"输出格式" completion:"custom" completion_values:"json yaml toml xml"`}
支持的补全类型:
file
- 文件补全dir
- 目录补全custom
- 自定义值补全,需要配合completion_values
标签使用
生成的补全脚本可以按照以下方式安装:
Bash:
# 将脚本复制到 bash_completion.d 目录sudo cp your_app_completion.bash /etc/bash_completion.d/# 或添加到 .bashrcecho"source /path/to/your_app_completion.bash">>~/.bashrc
Zsh:
# 复制到 zsh 补全目录cp your_app_completion.zsh~/.zsh/completions/_your_app# 确保 fpath 包含补全目录echo"fpath=(~/.zsh/completions$fpath)">>~/.zshrc
Fish:
# 复制到 fish 补全目录cp your_app_completion.fish~/.config/fish/completions/
apache 2.0