为了账号安全,请及时绑定邮箱和手机立即绑定

在Go中调用os.Open(<filename>)时如何检查错误?

在Go中调用os.Open(<filename>)时如何检查错误?

Go
鸿蒙传说 2021-04-27 17:49:54
我是Go语言的新手(到目前为止已花费30分钟!),并且正在尝试执行文件I / O。  file, ok := os.Open("../../sample.txt")  if ok != nil {    // error handling code here    os.Exit(1)  }  ... 当呼叫失败时,它不应该返回错误号吗?该调用返回os.Error,除了'String()'之外没有其他方法。这是检查Go中错误的推荐方法吗?
查看完整描述

2 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

典型的Go代码(使用该os程序包)没有分析返回的错误对象。它只是将错误消息打印给用户(然后,用户根据打印的消息知道出了什么问题),或者将错误原样返回给调用者。


如果要阻止程序打开不存在的文件,或者要检查文件是否可读/可写,我建议在打开文件之前使用os.Stat函数。


您可以分析返回错误的Go类型,但这似乎很不方便:


package main


import "fmt"

import "os"


func main() {

    _, err := os.Open("non-existent")

    if err != nil {

        fmt.Printf("err has type %T\n", err)

        if err2, ok := err.(*os.PathError); ok {

            fmt.Printf("err2 has type %T\n", err2.Error)

            if errno, ok := err2.Error.(os.Errno); ok {

                fmt.Fprintf(os.Stderr, "errno=%d\n", int64(errno))

            }

        }


        fmt.Fprintf(os.Stderr, "%s\n", err)

        os.Exit(1)

    }

}

打印:


err has type *os.PathError

err2 has type os.Errno

errno=2

open non-existent: no such file or directory


查看完整回答
反对 回复 2021-05-10
  • 2 回答
  • 0 关注
  • 325 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信