首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go错误:“单值上下文中的多值filepath.Glob()”

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

Stack Overflow用户
提问于 2014-07-14 16:51:31
回答 1查看 2.3K关注 0票数 2

请有人解释一下为什么这一行代码:

代码语言:javascript
复制
var file_list []string = filepath.Glob(os.Getwd() + "/*.*")

正在产生这些错误:

代码语言:javascript
复制
multiple-value os.Getwd() in single-value context
multiple-value filepath.Glob() in single-value context

谢谢!布莱恩

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-14 16:54:55

两者都是返回错误,因此不能直接分配它们。

代码语言:javascript
复制
func Glob(pattern string) (matches []string, err error)
func Getwd() (dir string, err error)

您至少需要忽略错误返回值。

代码语言:javascript
复制
var file_list []string, _ = filepath.Glob(x)

通过以下方式:

代码语言:javascript
复制
cwd, _ = os.Getwd()
x := cwd + "/*.*"

但是,最好的做法是检查错误,如果错误不是nil,则执行操作。

实际上,二-二添加了在评论中

但是,不要忽略err**,,否则有一天你的程序不会做它应该做的事情,你也不会知道为什么。 很多时候,您希望您的函数也返回错误,您想要的“默认”处理程序是

代码语言:javascript
复制
if err != nil { return err }

如果错误完全出乎意料,而您的程序所能做的最好的事情就是在遇到错误后退出,那么:

代码语言:javascript
复制
if err != nil { log.Panic("error doing foo: ", err) }. 

我推荐github.com/kisielk/errcheck来捕捉错误,即使是在你试图做到细致的时候,这些错误也很容易犯。

如果您真的想使用两个返回值中的第一个值,而不引入中间变量,那么您将需要一个帮助函数。

代码语言:javascript
复制
func slice(args ...interface{}) []interface{} {
    return args
}

但这对您的情况没有多大帮助,因为[]interface不是[]string

顶棚评论中提到了另一个辅助函数

我们也可以使用这种模式:

代码语言:javascript
复制
oneArg := must(twoArgsFunc(...)) 

使用助手函数“must”,否则会引起恐慌,例如text/template/#Must

代码语言:javascript
复制
func Must(t *Template, err error) *Template

Must是一个助手,它封装对函数的调用,如果错误为非零,则返回(*Template, error)和panics。 它用于变量初始化,例如:

代码语言:javascript
复制
var t = template.Must(template.New("name").Parse("text"))
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24741665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档