Golang : flag 包简介(转载)

转自一篇文章,清晰易懂

https://www.cnblogs.com/sparkdev/p/10812422.html

入门 demo

在 Go workspace 的 src 目录下创建 flagdemo 目录,并在目录下创建 main.go 文件,编辑其内容如下:

package main

import "flag"
import "fmt"

// 定义命令行参数对应的变量,这三个变量都是指针类型
var cliName = flag.String("name", "nick", "Input Your Name")
var cliAge = flag.Int("age", 28, "Input Your Age")
var cliGender = flag.String("gender", "male", "Input Your Gender")

// 定义一个值类型的命令行参数变量,在 Init() 函数中对其初始化
// 因此,命令行参数对应变量的定义和初始化是可以分开的
var cliFlag int
func Init() {
    flag.IntVar(&cliFlag, "flagname", 1234, "Just for demo")
}

func main() {
    // 初始化变量 cliFlag
    Init()
    // 把用户传递的命令行参数解析为对应变量的值
    flag.Parse()
    
    // flag.Args() 函数返回没有被解析的命令行参数
    // func NArg() 函数返回没有被解析的命令行参数的个数
    fmt.Printf("args=%s, num=%d\n", flag.Args(), flag.NArg())
    for i := 0; i != flag.NArg(); i++ {
        fmt.Printf("arg[%d]=%s\n", i, flag.Arg(i))
    }
    
    // 输出命令行参数
    fmt.Println("name=", *cliName)
    fmt.Println("age=", *cliAge)
    fmt.Println("gender=", *cliGender)
    fmt.Println("flagname=", cliFlag)
}

使用 flag 包前要通过 import 命令导入该包:

import "flag"

定义一个整型的参数 age,返回指针类型的变量:

var cliAge = flag.Int("age", 28, "Input Your Age")

创建值类型的参数变量,并在 Init() 函数中对其初始化(注意这里调用的是 flag.IntVar 方法):

var cliFlag int
func Init() {
    flag.IntVar(&cliFlag, "flagname", 1234, "Just for demo")
}

通过 flag.Parse() 函数接下命令行参数,解析函数将会在碰到第一个非 flag 命令行参数时停止:

flag.Parse()

命令行传参的格式:

-isbool    (一个 - 符号,布尔类型该写法等同于 -isbool=true)
-age=x     (一个 - 符号,使用等号)
-age x     (一个 - 符号,使用空格)
--age=x    (两个 - 符号,使用等号)
--age x    (两个 - 符号,使用空格)

运行 demo

在 flagdemo 目录下执行 go build 命令编译 demo 生成可执行文件 flagdemo。
不传递命令行参数

此时输出的命令行参数都是定义的默认值。

传递命令行参数

传递的命令行参数会覆盖默认值。

传递多余的命令行参数

可以通过 flag.Args() 和 flag.NArg() 函数获取未能解析的命令行参数。

传递错误的命令行参

如果通过 -xx 传入未定义的命令行参数,则会直接报错退出,并输出帮助信息。

查看帮助信息
通过命令行参数 -h 或 --help 可以查看帮助信息:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值