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

艾伦·斯托姆(Alan Storm):

在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是否有任何代码可以自动实现这些标志?我已经阅读了官方文档,没有发现任何明显的问题,但是我仍然可以浏览这些文档。

如果没有任何官方信息,那么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)
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章