Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

clop的静态代码生成版本,适用于对性能要求比较高的场景(目前只是自用)

License

NotificationsYou must be signed in to change notification settings

antlabs/quickclop

Repository files navigation

QuickClop 是clop 的静态代码生成版本,适用于对性能要求比较高的场景。通过静态代码生成,避免了运行时反射带来的性能开销。

功能特点

  • 基于结构体标签自动生成命令行参数解析代码
  • 支持短选项和长选项(如-X; --request
  • 支持各种数据类型,包括基本类型、指针类型、切片类型等
  • 自动生成帮助信息
  • 按需导入必要的包,优化生成的代码
  • 详细的错误处理

更多功能详情请参考FEATURES.md

安装

go get github.com/antlabs/quickclop

使用方法

  1. 定义带有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"`}
  1. 运行 quickclop 工具生成代码:
quickclop path/to/your/package
  1. 在你的代码中使用生成的ParseUsage 方法:
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 选项指定配置文件路径。

Shell 补全脚本

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

About

clop的静态代码生成版本,适用于对性能要求比较高的场景(目前只是自用)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

[8]ページ先頭

©2009-2025 Movatter.jp