Golang获取命令行参数的方式

您所在的位置:网站首页 hdp9588参数 Golang获取命令行参数的方式

Golang获取命令行参数的方式

2023-04-14 20:29| 来源: 网络整理| 查看: 265

1.介绍

当我们希望通过命令行启动Golang程序,获取输入的各种形式参数时,该如何处理呢?

2.os.Args

os.Args是一个string的切片,用来存储所有的命令行参数,包括go run main.go这部分,整体编译后实际是生成和运行的main.exe文件,所以第一个参数是main.exe。示例如下:

func main() { for i ,v := range os.Args { fmt.Println(i, v) } } 复制代码

命令行携带参数启动:go run main.go -name korbin aaa bbb ccc,运行结果如下:

0 C:\Users\Korbin\AppData\Local\Temp\go-build427584346\b001\exe\main.exe 1 -name 2 korbin 3 aaa 4 bbb 5 ccc 复制代码 3.flag包

Golang内置的flag包提供了一系列解析命令行参数的功能接口,使用flag主要包括以下几步:

3.1 定义flag命令行参数

第一步首先定义命令行参数,有如下三种方式:

1.通过flag.String(), Bool(), Int() 等flag.Xxx()方法,该种方式返回一个相应的指针:

ip := flag.Int("name", "korbin", "the author's name") 复制代码

方法中有三个参数: name:表示指定的参数名,在命令行中输入为-name或--name value:表示默认值 usage:参数说明描述

2.通过flag.XxxVar()方法将参数值绑定到一个变量,该种方式无返回值,如:

var name string flag.StringVar(&name , "name", "korbin", "the author's name") 复制代码

方法的第一个参数为绑定的变量,传指针;后续参数和上述相同。

3.通过flag.Var()绑定自定义类型,自定义类型需要实现Value接口(Receives必须为指针),如:

flag.Var(&name, "name", "the author's name") 复制代码

对于这种类型的flag,默认值为该变量类型的初始值,即输入的是int类型则默认为0,string默认为空等。

3.2 flag.Parse()

第二步,调用flag.Parse() 将命令行参数解析到定义的flag:

flag.Parse() 复制代码

解析函数将会在碰到第一个非flag命令行参数时停止,非flag命令行参数是指不满足命令行语法的参数,如命令行参数为cmd --flag=true abc则第一个非 flag 命令行参数为“abc”

3.3 使用命令行参数

通过上述定义参数和解析参数两步,就已经是可以拿到我们的参数了。并且对于非命令行参数,还可通过flag.Args(), flag.Arg(i)来获取 ~

完整的示例如下:

package main import ( "flag" "fmt" "os" ) func main() { s := flag.String("name", "korbin", "这是作者的姓名") flag.Parse() fmt.Println("命令行参数name的值:",*s) fmt.Printf("非命令行参数切片:%v", flag.Args()) } 复制代码

命令行携带参数启动:go run main.go -name korbin aaa bbb ccc,运行结果如下:

命令行参数name的值: korbin 非命令行参数切片:[aaa bbb ccc] 复制代码


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3