繁体   English   中英

错误:“单值上下文中的多值filepath.Glob()”

[英]Go Error: “multiple-value filepath.Glob() in single-value context”

有人可以解释为什么这行代码:

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

实际上, twotwotwo添加了注释

但是,请不要忽略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


topskip评论中提到了另一个帮助器功能:

也可以使用以下模式:

oneArg := must(twoArgsFunc(...)) 

带有帮助函数' must '的函数,否则将引起恐慌,例如text/template/#Must

func Must(t *Template, err error) *Template

Must是一个帮助程序,它包装对返回的函数的调用(*Template, error) ,如果错误为非nil,则会出现恐慌。
它旨在用于变量初始化,例如:

var t = template.Must(template.New("name").Parse("text"))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM