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

尽情享用吧

相关推荐
Re.不晚12 分钟前
Java入门15——抽象类
java·开发语言·学习·算法·intellij-idea
老秦包你会15 分钟前
Qt第三课 ----------容器类控件
开发语言·qt
凤枭香17 分钟前
Python OpenCV 傅里叶变换
开发语言·图像处理·python·opencv
ULTRA??21 分钟前
C加加中的结构化绑定(解包,折叠展开)
开发语言·c++
码农派大星。22 分钟前
Spring Boot 配置文件
java·spring boot·后端
远望清一色37 分钟前
基于MATLAB的实现垃圾分类Matlab源码
开发语言·matlab
confiself1 小时前
大模型系列——LLAMA-O1 复刻代码解读
java·开发语言
XiaoLeisj1 小时前
【JavaEE初阶 — 多线程】Thread类的方法&线程生命周期
java·开发语言·java-ee
杜杜的man1 小时前
【go从零单排】go中的结构体struct和method
开发语言·后端·golang
幼儿园老大*1 小时前
走进 Go 语言基础语法
开发语言·后端·学习·golang·go