• golang之命令行参数 X


    当我们希望通过命令行启动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]
  • 相关阅读:
    AcWing 157. 树形地铁系统 (hash判断树同构)打卡
    AcWing 156. 矩阵 (哈希二维转一维查询)打卡
    AcWing 144. 最长异或值路径 01字典树打卡
    AcWing 143. 最大异或对 01字典树打卡
    AcWing 142. 前缀统计 字典树打卡
    AcWing 139. 回文子串的最大长度 hash打卡
    AcWing 138. 兔子与兔子 hash打卡
    常用C库函数功能及用法
    编程实现C库函数
    C语言面试题5
  • 原文地址:https://www.cnblogs.com/xingxia/p/golang_command.html
Copyright © 2020-2023  润新知