go Flag应用

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 仿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(){}

目录
相关文章
|
13天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
54 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
5月前
|
Cloud Native Go 开发工具
不改一行代码轻松玩转 Go 应用微服务治理
为了更好的进行 Go 应用微服务治理,提高研发效率和系统稳定性,本文将介绍 MSE 微服务治理方案,无需修改业务代码,实现治理能力。
19878 13
|
5月前
|
数据采集 网络协议 测试技术
使用Go Validator在Go应用中有效验证数据
使用Go Validator在Go应用中有效验证数据
|
5月前
|
并行计算 数据挖掘 大数据
[go 面试] 并行与并发的区别及应用场景解析
[go 面试] 并行与并发的区别及应用场景解析
|
2月前
|
缓存 监控 前端开发
在 Go 语言中实现 WebSocket 实时通信的应用,包括 WebSocket 的简介、Go 语言的优势、基本实现步骤、应用案例、注意事项及性能优化策略,旨在帮助开发者构建高效稳定的实时通信系统
本文深入探讨了在 Go 语言中实现 WebSocket 实时通信的应用,包括 WebSocket 的简介、Go 语言的优势、基本实现步骤、应用案例、注意事项及性能优化策略,旨在帮助开发者构建高效稳定的实时通信系统。
126 1
|
2月前
|
监控 Go API
Go语言在微服务架构中的应用实践
在微服务架构的浪潮中,Go语言以其简洁、高效和并发处理能力脱颖而出,成为构建微服务的理想选择。本文将探讨Go语言在微服务架构中的应用实践,包括Go语言的特性如何适应微服务架构的需求,以及在实际开发中如何利用Go语言的特性来提高服务的性能和可维护性。我们将通过一个具体的案例分析,展示Go语言在微服务开发中的优势,并讨论在实际应用中可能遇到的挑战和解决方案。
|
2月前
|
Go 数据处理 API
Go语言在微服务架构中的应用与优势
本文摘要采用问答形式,以期提供更直接的信息获取方式。 Q1: 为什么选择Go语言进行微服务开发? A1: Go语言的并发模型、简洁的语法和高效的编译速度使其成为微服务架构的理想选择。 Q2: Go语言在微服务架构中有哪些优势? A2: 主要优势包括高性能、高并发处理能力、简洁的代码和强大的标准库。 Q3: 文章将如何展示Go语言在微服务中的应用? A3: 通过对比其他语言和展示Go语言在实际项目中的应用案例,来说明其在微服务架构中的优势。
|
3月前
|
Cloud Native Go API
Go语言在微服务架构中的创新应用与实践
本文深入探讨了Go语言在构建高效、可扩展的微服务架构中的应用。Go语言以其轻量级协程(goroutine)和强大的并发处理能力,成为微服务开发的首选语言之一。通过实际案例分析,本文展示了如何利用Go语言的特性优化微服务的设计与实现,提高系统的响应速度和稳定性。文章还讨论了Go语言在微服务生态中的角色,以及面临的挑战和未来发展趋势。
|
2月前
|
SQL 监控 算法
为Go应用无侵入地添加任意代码
这篇文章旨在提供技术深度和实践指南,帮助开发者理解并应用这项创新技术来提高Golang应用的监控与服务治理能力。在接下来的部分,我们将通过一些实际案例,进一步展示如何在不同场景中应用这项技术,提供更多实践启示。
|
3月前
|
运维 Go 开发者
Go语言在微服务架构中的应用与优势
本文深入探讨了Go语言在构建微服务架构中的独特优势和实际应用。通过分析Go语言的核心特性,如简洁的语法、高效的并发处理能力以及强大的标准库支持,我们揭示了为何Go成为开发高性能微服务的首选语言。文章还详细介绍了Go语言在微服务架构中的几个关键应用场景,包括服务间通信、容器化部署和自动化运维等,旨在为读者提供实用的技术指导和启发。