如何在Go语言中获取命令行参数,而不使用“flags”包?

20

我正在尝试为Go编写GNU风格的命令行解析器,因为flags包还不能处理所有这些:

program -aAtGc --long-option-1 argument-to-1 --long-option-2 -- real-argument

显然,我不想使用flags包,因为我正试图替换它。是否有其他方法可以进入命令行?

2个回答

45

没事了。

package main

import (
    "fmt"
    "os"
)

func main() {
    args := os.Args
    fmt.Printf("%d\n", len(args))

    for i := 0; i<len(args); i++ {
        fmt.Printf("%s\n", args[i])
    }
}

虽然文档存在,但它非常不完整。


我正在寻找这个的实现,只是想知道你是否完成了它/开源了代码? - Sahas
感谢您提供的解决方案。我不知道这是否相关,但其他人可能会发现它很有用。 有两种方法可以运行此程序。 1)go build prog.go ./prog hello world slappa 2)go run prog.go hello world slappa - Anvesh Checka

1
os.Args的第一个参数是go文件的名称,因此要获取命令行参数,您应该这样做。
package main

import (
    "fmt"
    "os"
)

func main() {
    args := os.Args[1:]

    for i := 0; i<len(args); i++ {
        fmt.Println(args[i])
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接