Golang错误和文档

Golang错误和文档,go,runtime-error,Go,Runtime Error,不幸的是,标准库中的golang错误文档几乎不存在。e、 g.仅打开一个文件,除了可以打印字符串外,不会记录错误的返回值。但这并不总是正确的处理方式 有没有办法通过反复试验而不是仅仅打印文本来确定真正的错误代码?将整个文本与具体错误进行匹配似乎很愚蠢 e、 g.鉴于我希望最终实现这样的目标(假设它是正确的) 据我所知,实现错误接口的任何东西都可以用作错误。但确定错误是什么是我正在努力解决的问题。该错误可能是一个结构,其中有其他字段,如数字字段,以告诉我除了文本本身之外,它是什么类型的错误。 但是

不幸的是,标准库中的golang错误文档几乎不存在。e、 g.仅打开一个文件,除了可以打印字符串外,不会记录错误的返回值。但这并不总是正确的处理方式

有没有办法通过反复试验而不是仅仅打印文本来确定真正的错误代码?将整个文本与具体错误进行匹配似乎很愚蠢

e、 g.鉴于我希望最终实现这样的目标(假设它是正确的)

据我所知,实现错误接口的任何东西都可以用作错误。但确定错误是什么是我正在努力解决的问题。该错误可能是一个结构,其中有其他字段,如数字字段,以告诉我除了文本本身之外,它是什么类型的错误。 但是我怎么知道这个错误包含的其他数据呢?除了查看许多源文件,有时还要查看几十个函数调用

这有意义吗

作为一个更实际的例子。我正在使用yaml库加载配置文件。 如果配置文件不存在,我想继续(它将使用默认值)。但是如果存在权限错误,我希望将该错误视为致命错误。问题是,目前还不完全清楚提前会出现什么样的错误

用于检查未找到文件的错误:

f, err := os.Open("filename")
if os.IsNotExist(err) {
  // handle missing file
} else if err != nil {
  // handle other errors
}
函数,并检查其他常见类型的错误

和其他包为特定错误声明变量

用于检查未找到文件的错误:

f, err := os.Open("filename")
if os.IsNotExist(err) {
  // handle missing file
} else if err != nil {
  // handle other errors
}
函数,并检查其他常见类型的错误


和其他包为特定错误声明变量

如果未清除库的相关信息,请始终检查godoc。 。下面是godoc io URL,请阅读更多信息


如果您不清楚某个库,请始终检查godoc。 。下面是godoc io URL,请阅读更多信息



您是在寻求图书馆作者的指导,还是在抱怨
io
软件包的API?如果是前者,则可以导出自定义错误变量,例如
var theworldhasend=errors.New(“世界已结束”)
;然后,客户端代码将能够测试他们得到的错误是否是那一个:
如果err==foo.theworld结束了{…}
。两者都有一点。我希望我能打印出每一个细节的错误。例如,可以使用fmt.Printf(“%+v\n”,structvar)打印结构。但是使用error你不能这样做,所以我没有什么可以匹配的,只有文本或跟踪数十个函数调用,查看库文档、io包文档或任何地方都不存在的文档的源代码。你明白我的意思吗。如果我至少能得到一个int变量,我会有更有用的东西。或者,如果我同意你的观点,有一个很大的错误代码结构,那么库作者可以使用更具体的错误类型,但选择不使用。此外,标准化的跨包错误很少,除非绝对必要,否则使用中的错误很少被记录。标准库中的错误文档通常非常优秀。但是标准库中有很多包,所以很难准确地知道您在谈论什么。在
io
库中,有,IMO.@Flimsy-关于错误的文档有点薄。如果我们不知道哪些函数返回哪些错误,那么我们可能最终会处理从未返回的错误,这是在浪费编写时间。来自C世界,我通过手册页知道每个函数可能返回哪些错误。这就是我们所缺少的。在我看来,这些文档可能需要一些工作。您是在寻求作为库作者的指导,还是在抱怨
io
包的API?如果是前者,则可以导出自定义错误变量,例如
var theworldhasend=errors.New(“世界已结束”)
;然后,客户端代码将能够测试他们得到的错误是否是那一个:
如果err==foo.theworld结束了{…}
。两者都有一点。我希望我能打印出每一个细节的错误。例如,可以使用fmt.Printf(“%+v\n”,structvar)打印结构。但是使用error你不能这样做,所以我没有什么可以匹配的,只有文本或跟踪数十个函数调用,查看库文档、io包文档或任何地方都不存在的文档的源代码。你明白我的意思吗。如果我至少能得到一个int变量,我会有更有用的东西。或者,如果我同意你的观点,有一个很大的错误代码结构,那么库作者可以使用更具体的错误类型,但选择不使用。此外,标准化的跨包错误很少,除非绝对必要,否则使用中的错误很少被记录。标准库中的错误文档通常非常优秀。但是标准库中有很多包,所以很难准确地知道您在谈论什么。在
io
库中,有,IMO.@Flimsy-关于错误的文档有点薄。如果我们不知道哪些函数返回哪些错误,那么我们可能最终会处理从未返回的错误,这是在浪费编写时间。来自C世界,我通过手册页知道每个函数可能返回哪些错误。这就是我们所缺少的。在国际海事组织,这些文件可能需要一些工作。这正是缺少一半可以返回的错误的文件(@Matt:具体说来,遗漏了什么?“文档很糟糕”和“遗漏了一半错误”并不是具体的投诉/问题。正是这些文档遗漏了可以返回的一半错误。:(@Matt:具体说来,遗漏了什么?“文档很糟糕”和“遗漏了一半错误”没有具体的投诉/问题。所以基本上是猜测。好的。该软件包记录了a的四个功能