ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

golang之命令行参数

2022-04-02 17:02:59  阅读:151  来源: 互联网

标签:name golang flag 参数 命令行 go main


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

 

[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

 

[flag]

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

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默认为空等。

 

2.flag.Parse()

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

flag.Parse()

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

 

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]

 

标签:name,golang,flag,参数,命令行,go,main
来源: https://www.cnblogs.com/xingxia/p/golang_command.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有