有人可以解释为什么这行代码:
var file_list []string = filepath.Glob(os.Getwd() + "/*.*")
正在产生这些错误:
multiple-value os.Getwd() in single-value context multiple-value filepath.Glob() in single-value context
谢谢!布赖恩
两者都返回错误,因此您不能直接分配它们。
func Glob(pattern string) (matches []string, err error) func Getwd() (dir string, err error)
您至少需要忽略错误返回值。
var file_list []string, _ = filepath.Glob(x)
带有:
cwd, _ = os.Getwd() x := cwd + "/*.*"
但是最佳做法是检查错误,如果不是,请采取措施nil。
nil
实际上,twotwotwo在注释中添加了:
err 不过,请不要忽略,否则有一天您的程序将无法执行应做的事情,并且您将不知道为什么。 很多时候,您希望函数也返回错误,而您想要的“默认”处理程序是
err
if err != nil { return err }
如果错误是完全意外的,并且您的程序可以做的最好的事情是在遇到错误后退出,那么:
if err != nil { log.Panic("error doing foo: ", err) }.
我建议使用github.com/kisielk/errcheck来发现错误,即使您一丝不苟,也很容易在早期犯下这些错误。
如果您确实想使用两个返回值中的第一个,而不引入中间变量,则需要一个辅助函数:
func slice(args ...interface{}) []interface{} { return args }
但这对您没有太大帮助,因为[]interface不是[]string。
[]interface
[]string
topskip在评论中提到了另一个帮助器功能:
也可以使用以下模式:
oneArg := must(twoArgsFunc(...))
带有辅助功能“ must”,否则会出现紧急情况,例如text/template/#Must
must
text/template/#Must
func Must(t *Template, err error) *Template
Must是一个帮助程序,(*Template,error)如果错误为非nil,则该函数包装对返回的函数的调用,并且会发生恐慌。 它旨在用于变量初始化,例如:
Must
(*Template,error)
var t = template.Must(template.New("name").Parse("text"))