go语言 从命令行获取参数解析

go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单。

os.Args

如果你只是简单的想要获取命令行参数,可以像下面的示例代码一样使用os.Args来获取命令行参数

package main
import "fmt"
import "os"
func main(){
    if len(os.Args)>0 {
        for index , value := range os.Args {
            fmt.Println(index, value)
        }
    }
}

将上面的代码执行go build -o "args_demo"编译之后,执行:

0 ./args_demo
1 a
2 b
3 c
4 d

os.Args是一个存储命令行参数的字符串切片,它的第一个元素是执行文件的名称。

flag包的基本使用

本文介绍了flag包的常用函数以及基本用法,更详细的内容请参考官方文档。

导入flag包

import flag

flag参数类型

flag包支持的命令行参数类型有bool、int、int64、uint、uint64、float、float64、string、duration.

flag.Type()

基本格式如下:
flag.Type(flag名,默认值,帮助信息)*Type 例如我们要定义姓名、年龄、婚否三个命令行参数,我们可以按照如下定义:

    name := flag.String("name","ali","姓名")
    age := flag.Int("age",18,"年龄")
    married := flag.Bool("married",false,"婚否")
    delay := flag.Duration("d",0,"时间间隔")

需要注意的是,此时的 name,age,married,delay均为对应类型的指针。

flag.TypeVar()

基本格式如下:flag.TypeVar(Type指针,flag名,默认值,帮助信息)例如我们要定义姓名、年龄、婚否三个命令行参数,我们可以按照如下方式定义:

var name string
var age int
var married bool
var delay time.Duration
flag.StringVar(&name,"name","张三","姓名")
flag.IntVar(&age,"age",18,"年龄")
flag.BoolVar(&married,"married",false,"婚否")
flag.Duration(&delay,"d",0,"时间间隔")

flag.Parse()

通过以上两种方法定义命令行flag参数后,需要通过调用flag.Parse()来对命令行参数进行解析。
支持的命令行参数格式有一下几种:

  • -flag xxx (使用空格,一个 - 符号)
  • --flag xxx (使用空格,两个 - 符号)
  • -flag=xxx (使用等号, 一个 - 符号)
  • --flag = xxx (使用等号, 两个- 符号)

其中,布尔类型的参数必须用等号的方式指定。
flag在解析第一个非flag参数之前停止,或者在终止符"-"之后停止。

flag其他函数

flag.Args()  //返回命令行参数后的其他参数,以[]string类型
flag.NArg() //返回命令行参数后的其他参数个数
flag.NFlag() //返回使用命令行参数个数

完整示例

package main
import (
    "fmt"
    "flag"
    "time"
)
func main(){
    var name string
    var age int
    var married bool
    var delay time.Duration
    flag.StringVar(&name,"name","张三","姓名")
    flag.IntVar(&age,"age",18,"年龄")
    flag.BoolVar(&married,"married",false,"婚否")
    flag.DurationVar(&delay, "d", 0, "延迟的时间间隔")
    flag.Parse()
    fmt.Println(name,age,married,delay)
    fmt.Println(flag.Args())
    fmt.Println(flag.NArg())
    fmt.Println(flag.NFlag())

}

正常使用命令行flag参数:

 ./args_demo --name 霍帅兵 --age 18 --married=false -d 1h30m
霍帅兵 18 false 1h30m0s
[]
0
4

使用非flag命令行参数:

./args_demo a b c
张三 18 false 0s
[a b c]
3
0

原文地址:https://blog.51cto.com/13766835/2393358

时间: 2024-10-29 19:09:46

go语言 从命令行获取参数解析的相关文章

命令行之参数解析 optparse模块的运用

1 import optparse 2 3 op = optparse.OptionParser() #固定对象获取 4 op.add_option('-s','--server',dest = 'server') 5 op.add_option('-p','--p',dest = 'port') #dest起到封装属性的作用 6 options,argv = op.parse_args() #参数解析 7 print(options) 8 print(options.server) #opti

C语言处理命令行输入

在C语言中,我们经常碰到想要处理命令行的情况.当往往由于C语言字符串比较难处理,最终出现各种奇怪的错误.现已算法指令为例,说明C语言命令行处理的框架.算法指令如下图所示: 算法 指令 加法 ADD op1 op2 减法 SUB op1 op2 乘法 MUL op1 op2 除法 DIV op1 op2 预期效果: 程序等待用户输入用户指令,当程序键入算法指令后,输出正确的结果:如果出现非法操作,则输出响应的出错信息. 在main函数中,处理程序的代码框架,do_line处理由命令行获取的一行数据

Zabbix监控之Linux命令行/Shell脚本解析json

本文主要写了在Linux下如何用Shell脚本解析json数据,以便于在Zabbix中添加适合于业务应用的监控项. 为什么要使用json? json作为一种文本化的数据格式(文本化协议),符合UNIX编程的哲学,既符合透明性(透明性:设计可见,便于审查和调试)又符合文本性(文本性:数据应该保存为文本文件).关键在于json对Web程序或者java程序非常友好,对于开发人员来说,他们也喜欢使用json数据.业务逻辑.内部的依赖关系以及状态信息由程序员去做,运维人员只需要调用程序员开放出来的API接

记录一个 spring cloud 配置中心的坑,命令行端口参数无效,被覆盖

spring cloud 配置中心 结合GIT , 可以运行时更新配置文件.发送指令让应用重新读取配置文件. 最近在测试服务器实现了一套,结果CPU 实用率暴增,使用docker compose启动 restart always 多节点的服务一直重启关闭重启关闭. 日志文件记录了一个异常: 国内国外搜了一遍都没有解决 org.springframework.beans.factory.BeanCreationNotAllowedException: Error creating bean wit

直接从命令行获取MySQL查询语句结果

如果你需要直接从命令行获取MySQL查询语句结果,那么你可以使用-B和-N这两个参数来达到目的. 例:获取MySQL用户数. [[email protected] ~]# mysql -BN -uroot -predhat mysql -e 'select count(*) from user' 6 [[email protected] ~]# -B参数:去掉边框 -N参数:只显示结果

Linux学习之命令行获取公网IP方法详解

本文和大家分享的主要是主要是linux命令行获取公网IP相关内容,一起来看看吧,希望对大家学习linux有所帮助. curl ipinfo.io $ curl ipinfo.io { "ip": "36.10.25.4", "city": "Hangzhou", "region": "Zhejiang", "country": "CN", &quo

用Linux命令行获取本机外网IP地址

用Linux命令行获取本机外网IP地址 $ curl ifconfig.me$ curl icanhazip.com$ curl ident.me$ curl ipecho.net/plain$ curl whatismyip.akamai.com$ curl tnx.nl/ip$ curl myip.dnsomatic.com$ curl ip.appspot.com$ curl -s checkip.dyndns.org | sed 's/.*IP Address: \([0-9\.]*\)

c语言中命令行参数argc,argv[ ]

main(int argc,char *argv[ ]) argv为指针的指针 argc为整数 char **argv or: char *argv[] or: char argv[][] main()括号内是固定的写法. 下面给出一个例子来理解这两个参数的用法: 假设程序的名称为prog, 当只输入prog,则由操作系统传来的参数为: argc=1,表示只有一程序名称. argc只有一个元素,argv[0]指向输入的程序路径及名称:./prog 当输入prog para_1,有一个参数,则由操

R语言使用命令行参数

args_test.R 代码如下: Args <- commandArgs()cat("Args[1]=",Args[1],"\n")cat("Args[2]=",Args[1],"\n")cat("Args[3]=",Args[3],"\n")cat("Args[4]=",Args[4],"\n")cat("Args[5]=&qu