第一个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

尽情享用吧

相关推荐
时光话21 分钟前
Lua 第11部分 小插曲:出现频率最高的单词
开发语言·lua
梦之马23 分钟前
spring boot 2升级3 记录
java·spring boot·后端
泽02021 小时前
C++入门(缺省参数/函数/引用)
开发语言·c++
Themberfue3 小时前
Redis ⑦-set | Zset
java·开发语言·数据库·redis·sql·缓存
__lost4 小时前
MATLAB画出3d的常见复杂有机分子和矿物的分子结构
开发语言·人工智能·matlab·化学·分子结构
夜夜敲码5 小时前
C语言教程(十八):C 语言共用体详解
c语言·开发语言
大学生亨亨6 小时前
go语言八股文(五)
开发语言·笔记·golang
raoxiaoya6 小时前
同时安装多个版本的golang
开发语言·后端·golang
cloues break.7 小时前
C++进阶----多态
开发语言·c++
我不会编程5557 小时前
Python Cookbook-6.10 保留对被绑定方法的引用且支持垃圾回收
开发语言·python