如何在没有“标志”包的情况下在 Go 中获取命令行参数?

Posted

技术标签:

【中文标题】如何在没有“标志”包的情况下在 Go 中获取命令行参数?【英文标题】:How do I get the command line arguments in Go without the "flags" package? 【发布时间】:2010-12-15 12:06:29 【问题描述】:

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

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

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

【问题讨论】:

【参考方案1】:

没关系。

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])
    

不过,文档还很不完整。

【讨论】:

我正在寻找一个实现,只是想知道你是否完成了它/开源了代码? 感谢您的解决方案。我不知道这是否相关。但其他人可能会觉得它很有用。有两种方法可以运行它。 1) 去构建 prog.go ./prog hello world slappa 2) 去运行 prog.go hello world slappa【参考方案2】:

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])
    

【讨论】:

以上是关于如何在没有“标志”包的情况下在 Go 中获取命令行参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有节点的情况下在命令行上执行javascript [关闭]

如何在没有意外匹配的情况下在 PHP 中的字符串中查找整个单词?

如何在没有互联网连接的情况下在android中获取当前纬度和经度?

如何在没有 fseek 和 ftell 的情况下在 ANSI C 中获取文件大小?

在 PHP 5.3 中,如何在没有严格警告的情况下在一行中获取单个元素数组中的值

如何在没有任何 vue 库的情况下在 vue 回调中获取 http 响应标头(axios)