Go:从文件中读取命令行标志

标签 go command-line-interface

在 Go 中创建命令行程序时,有没有一种方法(由核心库提供,或被广泛接受的做法)实现从文件读取其内容的命令行标志?

如果这还不清楚,我正在考虑命令行 curl 程序中的 @ 符号。许多 curl 的参数允许你做这样的事情来从文件中读取标志的值

# setting the value 
curl --data-binary '{...}' http://example.com

# setting the value by reading from a file
curl --data-binary @path/to/data.txt http://example.com  

go 有自动实现这些标志的代码吗?我已经阅读了官方文档和 didn't see anything obvious ,但我仍然掌握了浏览这些文档的窍门。

如果没有官方消息,go 社区中是否有人提供了包含此功能的事实上的标准“更好的标志”库?

还是由个别程序员创建一个字符串标志,扫描它以查找 @,然后由我自己处理读取文件内容?

最佳答案

flag.Value允许您实现任意标志行为:

package main

import (
        "flag"
        "fmt"
        "io/ioutil"
        "strings"
)

type T string

// String implements flag.Value
func (t *T) String() string {
        return string(*t)
}

// Set implements flag.Value
func (t *T) Set(maybeFilename string) error {
        if !strings.HasPrefix(maybeFilename, "@") {
                *t = T(maybeFilename)
                return nil
        }

        filename := maybeFilename[1:]
        b, err := ioutil.ReadFile(filename)
        if err != nil {
                return err
        }

        *t = T(string(b))
        return nil
}

func main() {
        var t T
        flag.Var(&t, "data-binary", "(description)")
        flag.Parse()
        fmt.Println(t)
}

关于Go:从文件中读取命令行标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49677352/

相关文章:

go-dockerclient `UploadToContainer` tar 示例

delphi - 一次性定时器

heroku - 如何在树莓派 3 上安装 Heroku CLI

macos - 无法在本地主机上启动 Go 服务器

go - 如何在 Go 中定义位文字?

ruby - 使用 Thor 创建嵌套子命令

git 子模块毁了我的一天

php - 通过 CLI 运行 PHP 时的 URL 参数

go - 使用 codegangsta/cli 捕获命令标志变量

email - 如何在没有任何 smtp 服务器的情况下在 golang 中发送电子邮件