请有人解释一下为什么这一行代码:
var file_list []string = filepath.Glob(os.Getwd() + "/*.*")正在产生这些错误:
multiple-value os.Getwd() in single-value context
multiple-value filepath.Glob() in single-value context谢谢!布莱恩
发布于 2014-07-14 16:54:55
两者都是返回错误,因此不能直接分配它们。
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,则执行操作。
但是,不要忽略
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。
我们也可以使用这种模式:
oneArg := must(twoArgsFunc(...)) 使用助手函数“
must”,否则会引起恐慌,例如text/template/#Must
func Must(t *Template, err error) *Template
Must是一个助手,它封装对函数的调用,如果错误为非零,则返回(*Template, error)和panics。 它用于变量初始化,例如:
var t = template.Must(template.New("name").Parse("text"))https://stackoverflow.com/questions/24741665
复制相似问题