go Flag应用

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 仿nginx命令行go语言些命令行程序是不错的选择,所以它可以轻松达到如上图类似nginx命令行的效果例子package mainimport ( "flag" "fmt" "os")//var...
仿nginx命令行

go语言些命令行程序是不错的选择,所以它可以轻松达到如上图类似nginx命令行的效果

例子

package main

import (
    "flag"
    "fmt"
    "os"
)

//
var (
    h bool

    v,V bool
    t,T bool
    q *bool

    s string
    p string
    c string
    g string

    n int64
)

func init(){
    flag.BoolVar(&h,"h",false,"this help")
    flag.BoolVar(&v,"v",false,"show version and exit")
    flag.BoolVar(&V,"V",false,"show version and configure options then exit")
    flag.BoolVar(&t,"t",false,"test configuration and exit")
    flag.BoolVar(&T,"T",false,"test configuration,dump it and exit")

    //另一中绑定方式
    q = flag.Bool("q",false,"suppress non-error messages during configuration testing")
    //注意’signal‘,默认是 -S string 有了`signal`之后,变为-s signal
    flag.StringVar(&s,"s","","send `signal` to a master")
    flag.StringVar(&p,"p","/usr/local/nginx","set configuration `file`")
    flag.StringVar(&c,"c","conf/nginx.conf","set confiruration `file`")
    flag.StringVar(&g,"g","conf/nginx.conf","set global `directives` out of configuraton file")

    flag.Int64Var(&n,"n",0,"set `number`")
    //改变默认的usage
    flag.Usage=Usage
}

func main() {
    flag.Parse()
    if h {
        flag.Usage()
    }
    if len(s)!=0{
        fmt.Println(s)
    }
    if n !=0{
        fmt.Println(n)
    }
}

func Usage() {
    fmt.Fprintf(os.Stderr,`nginx version: nginx/1.10.0 Usage:nginx [-hvVtTq] [-n number] [-s signal] [-c filename] [-p prefix] [-g directives]
Options:
`)
    flag.PrintDefaults()
}

先执行go build或go install 编译代码
执行FlagPrac -h 命令就可以输出帮助信息了
执行FlagPrac -s wang

执行FlagPrac -s wang

Flag 概述

参考:标准库—命令行参数解析FLAG

两种定义Flag方式

  • Flag.Xxx()

其中Xxx可以是Int,String等;返回一个相应类型的指针,如:

q = flag.Bool("q",false,"suppress non-error messages during configuration testing")
  • Flag.XxxVar()

将flag绑定到一个变量上,如:

flag.BoolVar(&h,"h",false,"this help")

另外还可以创建自定义flag,只要实现flag.Value接口即可

Flag解析

在所有的flag定义完成之后,可以通过调用flag.Prarse()进行解析,命令行flag的语法有如下三种方式:

  • flag //只支持bool类型
  • flag=x
  • flag x //只支持非bool类型

int类型可以是十进制、十六进制、八进制甚至是负数;bool类型可以是1, 0, t, f, true, false, TRUE, FALSE, True, False。Duration可以接受任何time.ParseDuration能解析的类型

类型和函数

ErrHelp:该错误类型用于当命令行指定了-help参数但没有定义时。
Usage:这是一个函数,用于输出所有定义了的命令行参数和帮助信息(usage message)。一般,当命令行参数解析出错时,该函数会被调用。我们可以指定自己的Usage函数,即:flag.Usage = func(){}

目录
相关文章
|
2月前
|
Cloud Native Go 开发工具
不改一行代码轻松玩转 Go 应用微服务治理
为了更好的进行 Go 应用微服务治理,提高研发效率和系统稳定性,本文将介绍 MSE 微服务治理方案,无需修改业务代码,实现治理能力。
19766 5
|
3月前
|
监控 Kubernetes Go
全链路追踪 & 性能监控,GO 应用可观测全面升级
当前,大多数面向 Golang 应用的监控能力主要是通过 SDK 方式接入,需要开放人员手动进行埋点,会存在一定问题。对此,可观测 Go Agent 应运而生。本文介绍的阿里云可观测 Go Agent 方案,能通过无侵入的方式实现应用监控能力。
108485 23
|
2月前
|
数据采集 网络协议 测试技术
使用Go Validator在Go应用中有效验证数据
使用Go Validator在Go应用中有效验证数据
|
2月前
|
并行计算 数据挖掘 大数据
[go 面试] 并行与并发的区别及应用场景解析
[go 面试] 并行与并发的区别及应用场景解析
|
4月前
|
算法 程序员 编译器
美丽的代码:规范go应用代码注释
【6月更文挑战第30天】本文介绍注释应与代码同步,避免误导,且关键点解释。使用LLVM构建编译器示例展示Go语言规范。注释虽有局限,但在解释复杂逻辑、业务规则时仍有其价值。程序员需平衡注释与代码的关系,创造更优的代码。
1039 0
美丽的代码:规范go应用代码注释
|
4月前
|
安全 测试技术 Go
Go语言在高并发场景下的应用
在当今互联网高速发展的时代,高并发已成为众多应用系统面临的核心问题。本文探讨了Go语言在高并发场景下的优势,并通过具体实例展示了其在实际应用中的效果和性能表现。
|
1月前
|
安全 大数据 Go
深入探索Go语言并发编程:Goroutines与Channels的实战应用
在当今高性能、高并发的应用需求下,Go语言以其独特的并发模型——Goroutines和Channels,成为了众多开发者眼中的璀璨明星。本文不仅阐述了Goroutines作为轻量级线程的优势,还深入剖析了Channels作为Goroutines间通信的桥梁,如何优雅地解决并发编程中的复杂问题。通过实战案例,我们将展示如何利用这些特性构建高效、可扩展的并发系统,同时探讨并发编程中常见的陷阱与最佳实践,为读者打开Go语言并发编程的广阔视野。
|
2月前
|
存储 算法 Go
|
2月前
|
编译器 Go 开发者
|
2月前
|
数据采集 网络协议 测试技术
使用Go Validator在Go应用中有效验证数据
使用Go Validator在Go应用中有效验证数据
下一篇
无影云桌面