Ala*_*orm 1 command-line-interface go
在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
Run Code Online (Sandbox Code Playgroud)
有没有自动实现这些标志的代码?我已经阅读了官方文档,并没有看到任何明显的东西,但我仍然掌握着浏览这些文档.
如果没有官方的话,是否有一个事实上的标准"更好的标志"图书馆由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)
}
Run Code Online (Sandbox Code Playgroud)