Golang 获取命令行参数

学习背景

之前经常在 Linux 环境下使用 Supervisor 来管理 PHP 编写的守护进程业务。对 Supervisor 工具的命令行操作的简便与功能强大印象颇深。所以,就想着能否用 Golang 语言也编写一个类似的命令行管理的功能。

本文是在学习 Golang 命令行参数时在网上找到一篇靠谱的技术文章。
地址:http://www.01happy.com/golang-command-line-arguments/

golang os 库获取命令行参数

os 可以通过变量 Args 来获取命令参数,os.Args 返回一个字符串数组,其中第一个参数就是执行文件本身。

package main
 
import (
    "fmt"
    "os"
)
 
func main() {
    fmt.Println(os.Args)
}

编译执行后执行

$ ./cmd -user="root"
 [./cmd -user=root]

当我们看到这部分的时候,我犯了一个坏毛病:没有把文章看完。于是,我第一想法是接收命令行的参数然后根据位置进行解析。再根据参数的值进行启动相应的业务。

结果看完这篇文章,我发现我的想法太稚嫩可笑。因为 Golang 已经提供了一个非常强大的 flag 库。简直神器。

golang flag 获取命令行参数

package main
 
import (
    "flag"
    "fmt"
)
 
func main() {
    ok := flag.Bool("ok", false, "is ok")
    id := flag.Int("id", 0, "id")
    port := flag.String("port", ":8080", "http listen port")
    var name string
    flag.StringVar(&name, "name", "123", "name")
 
    flag.Parse()
 
    fmt.Println("ok:", *ok)
    fmt.Println("id:", *id)
    fmt.Println("port:", *port)
    fmt.Println("name:", name)
}

像 flag.Int、flag.Bool、flag.String 这样的函数格式都是一样的,第一个参数表示参数名称,第二个参数表示默认值,第三个参数表示使用说明和描述。flag.StringVar 这样的函数第一个参数换成了变量地址,后面的参数和 flag.String 是一样的。

我们现在来执行一下:

$ go run flag.go -id=2 -name="golang"
ok: false
id: 2
port: :8080
name: golang

大家会发现我们的参数前面有一个减号字符"-"。其实,这个 flag 库也支持两个减号字符。
大家可以试试:

$ go run flag.go --id=2 --name="golang"
ok: false
id: 2
port: :8080
name: golang

很多命令都提供了查看帮助信息的命令。我们的 flag 库也支持:

$ go run flag.go -h
-id=0: id
-name="123": name
-ok=false: is ok
-port=":8080": http listen port

或者:

$ go run flag.go --help
-id=0: id
-name="123": name
-ok=false: is ok
-port=":8080": http listen port

可以说, flag 库已经非常简便地为我们完成了几乎所有命令行操作的功能封装。非常实用且强大。

博主 2011 年创建了一个《PHP 初学者官方群》,目前群成员 500 人左右。群号:168159147。为了防止广告,设置为付费入群。欢迎大家加入讨论技术!

标签: 无

精彩评论
  1. 这篇文章真短。

发表评论: