当前位置: 首页 > 面试题库 >

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

包阳成
2023-03-14
问题内容

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

var file_html" target="_blank">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"))


 类似资料:
  • 问题内容: 由于Go中的错误处理,我经常会遇到多个值函数。到目前为止,我的管理方式非常混乱,我正在寻找编写更简洁代码的最佳实践。 假设我具有以下功能: 我如何优雅地分配一个新变量。在引入错误处理之前,我的函数刚刚返回,我可以简单地做到这一点: 现在,我这样做: 有没有办法直接访问第一个返回的变量? 问题答案: 如果是多值返回函数,则在调用函数时不能引用具有特定结果值的字段或方法。 如果他们中的一个

  • 问题内容: 我有以下代码: 我收到了错误: 根据我在Internet上找到的所有内容,这意味着我忽略了ParseInt返回的两个参数,但我使用的是err。我知道错误可能很愚蠢,但是我刚开始学习Go,这让我很困惑。 问题答案: 表达式是类型转换,它不能有多个参数(操作数),但是由于有2个返回值,因此基本上都是将两者都传递给类型转换,这是无效的。 而是这样做: 请注意,基数不能大于,因此在传递基数时肯

  • 问题内容: 我有一个这样的STRING切片数组: 请记住,阵列不断增加。我只是发布一个示例数组。 现在,我将一些浮点数转换为字符串,以便可以将其附加到字符串切片中。但是,我需要对这些数字进行一些数学运算。我想将第二个切片的字符串编号(5343340.56343)添加到第三个字符串编号(22139.461201388)。每片中的其他2个浮点数都相同。为此,我需要先将它们转换为float64。得到总和

  • 问题内容: 我收到此错误,无法显示它的开头或结尾。 确切的错误消息是: 致命错误:在第48行的/home/curricle/public_html/descarga/index.php中的写入上下文中无法使用函数返回值 第48行是: 这可能是怎么回事? 这是全部功能: 问题答案: 你的意思是 虽然顺便说一句

  • 我有一个带有主窗口的应用程序。它有自己的线程和opengl上下文。这个应用程序每个处理器还有一个工作线程来创建和上传软件渲染的纹理。这工作得非常好。 我担心的是工作线程opengl上下文是使用主窗口的device_context创建的。因此,在双处理器系统的情况下,这意味着3个opengl上下文被绑定到同一个window device_context。它们都是在主窗口线程中创建的,然后调用shar

  • 我使用的是Camel2.15版本,我尝试通过一个名为length of account number的额外属性作为交换,并尝试与路由中的value匹配,但它没有工作。 处理器: public void processMortgage(final Exchange Exchange)引发ServiceException{MessageContentsList MessageContentsList=