第一个golang项目增加help指令并调整指令模式

第一个golang项目增加help指令并调整指令模式

上一篇文章

调整指令模式

  • version指令修改为-v-version

  • replace指令修改为-r-replace

  • dir参数修改为-d-directory

    package commands

    import (
    "flag"
    "fmt"
    "log"
    "os"
    "strings"

      "github.com/spf13/viper"
    

    )

    var (
    help bool
    version bool
    replace bool

      directory string
    

    )

    func Init() {
    flag.BoolVar(&help, "h", false, "this help and exit")
    flag.BoolVar(&help, "help", false, "this help and exit")
    flag.BoolVar(&version, "v", false, "show version and exit")
    flag.BoolVar(&version, "version", false, "show version and exit")
    flag.BoolVar(&replace, "r", false, "send replace to process and replace content for scan files under directory.")
    flag.BoolVar(&replace, "replace", false, "send replace to process and replace content for scan files under directory.")

      // 注意 `directory`。默认是 -d string,有了 `directory` 之后,变为 -d directory
      flag.StringVar(&directory, "d", "", "send `directory` to process: standard, standard-fix, saas, saas-fix")
      flag.StringVar(&directory, "directory", "", "send `directory` to process: standard, standard-fix, saas, saas-fix")
    
      // 改变默认的 Usage
      flag.Usage = usage
    
      viper.SetConfigName("config") // 配置文件名(不包含扩展名)
      viper.SetConfigType("toml")   // 配置文件格式
      viper.AddConfigPath(".")      // 查找配置文件的路径
      if err := viper.ReadInConfig(); err != nil {
      	log.Fatalf("Error reading config file, %s", err)
      }
    
      flag.Parse()
    

    }

    func usage() {
    version := viper.Get("version").(string)
    cmd := os.Args[0]
    fmt.Fprintf(os.Stderr, `%s version: %s
    Usage: %s [-hvq] [-d,directory directory]

    Options:
    `, cmd, version, cmd)
    flag.PrintDefaults()
    }

    func Run() {
    Init()

      if help {
      	flag.Usage()
      } else if version {
      	Version()
      } else if replace {
      	dir := "standard"
      	if strings.TrimSpace(directory) != "" {
      		dir = directory
      	}
      	Replace(dir)
      } else {
      	flag.Usage()
      }
    

    }

增加help指令

  • -h-help指令,打印程序已知参数列表及参数说明

    func usage() {
    version := viper.Get("version").(string)
    cmd := os.Args[0]
    fmt.Fprintf(os.Stderr, `%s version: %s
    Usage: %s [-hvq] [-d,directory directory]

    Options:
    `, cmd, version, cmd)
    flag.PrintDefaults()
    }

减少了配置文件的解析读取次数

  • 在程序执行初始化时解析一次,后续皆可使用

    func Init() {
    flag.BoolVar(&help, "h", false, "this help and exit")
    flag.BoolVar(&help, "help", false, "this help and exit")
    flag.BoolVar(&version, "v", false, "show version and exit")
    flag.BoolVar(&version, "version", false, "show version and exit")
    flag.BoolVar(&replace, "r", false, "send replace to process and replace content for scan files under directory.")
    flag.BoolVar(&replace, "replace", false, "send replace to process and replace content for scan files under directory.")

      // 注意 `directory`。默认是 -d string,有了 `directory` 之后,变为 -d directory
      flag.StringVar(&directory, "d", "", "send `directory` to process: standard, standard-fix, saas, saas-fix")
      flag.StringVar(&directory, "directory", "", "send `directory` to process: standard, standard-fix, saas, saas-fix")
    
      // 改变默认的 Usage
      flag.Usage = usage
    
      viper.SetConfigName("config") // 配置文件名(不包含扩展名)
      viper.SetConfigType("toml")   // 配置文件格式
      viper.AddConfigPath(".")      // 查找配置文件的路径
      if err := viper.ReadInConfig(); err != nil {
      	log.Fatalf("Error reading config file, %s", err)
      }
    
      flag.Parse()
    

    }

新指令模式

func Run() {
	Init()

	if help {
		flag.Usage()
	} else if version {
		Version()
	} else if replace {
		dir := "standard"
		if strings.TrimSpace(directory) != "" {
			dir = directory
		}
		Replace(dir)
	} else {
		flag.Usage()
	}
}

打包并运行

go build -v -ldflags "-linkmode external -extldflags '-static' -w" -o devtools.exe main.go
devtools.exe -h
devtools.exe -help
devtools.exe -v
devtools.exe -version
devtools.exe -r -d saas
devtools.exe -replace -directory saas

https://gitee.com/xqxyxchy/dev-tools

尽情享用吧

相关推荐
Eiceblue44 分钟前
Python 合并 Excel 单元格
开发语言·vscode·python·pycharm·excel
幸好我会魔法1 小时前
人格分裂(交互问答)-小白想懂Elasticsearch
大数据·spring boot·后端·elasticsearch·搜索引擎·全文检索
SomeB1oody2 小时前
【Rust自学】15.2. Deref trait Pt.1:什么是Deref、解引用运算符*与实现Deref trait
开发语言·后端·rust
何中应2 小时前
从管道符到Java编程
java·spring boot·后端
情深不寿3173 小时前
C++----STL(list)
开发语言·c++
组合缺一3 小时前
Solon Cloud Gateway 开发:Route 的过滤器与定制
java·后端·gateway·reactor·solon
SomeB1oody3 小时前
【Rust自学】15.4. Drop trait:告别手动清理,释放即安全
开发语言·后端·rust
liruiqiang053 小时前
DDD-全面理解领域驱动设计中的各种“域”
开发语言·架构
customer083 小时前
【开源免费】基于SpringBoot+Vue.JS贸易行业crm系统(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·开源
前端熊猫3 小时前
JavaScript 的 Promise 对象和 Promise.all 方法的使用
开发语言·前端·javascript