遗憾的是,标准库中的golang错误文档几乎不存在。例如只是打开一个文件,除了你可以打印一个字符串之外,没有记录错误的返回值。但这并非总是处理它的正确方法。
有没有办法通过试验和错误来确定真正的错误代码是什么,而不仅仅是打印出文本?对于特定错误匹配整个文本似乎很愚蠢。
e.g。鉴于我想最终实现这样的目标(假设它是正确的)
echo GridView::widget([
'dataProvider' => $dataProvider,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
[
'label' => 'От кого',
'attribute' => 'src',
// 'format' => ['decimal', 2],
],
[
'label' => 'Кому',
'attribute' => 'dst',
// 'format' => ['decimal', 2],
],
[
'label' => 'Начало',
'attribute' => 'Start',
// 'format' => ['decimal', 2],
],
[
'label' => 'Длительность (сек)',
'attribute' => 'Billing',
// 'format' => ['decimal', 2],
],
[
'label' => 'UUID',
'attribute' => 'uniqueid',
// 'format' => ['decimal', 2],
],
//~ ['class' => 'yii\grid\ActionColumn'],
],
]);
据我所知,实现错误接口的任何内容都可以用作错误。但确定错误是什么,我正在努力。该错误可能是一个结构,其中包含其他字段,如数字字段,以告诉我它与文本本身有什么类型的错误。 但是,我如何才能知道错误包含的其他数据,而不是查看许多源文件,有时还需要进行数十次函数调用。
这有意义吗?
作为一个更实际的例子。我正在使用yaml库来加载配置文件。 如果配置文件不存在,我想继续(它将使用默认值)。但是如果存在权限错误,我希望将错误视为致命错误。问题是,提前错误看起来并不完全清楚。
答案 0 :(得分:3)
使用os.IsNotExist检查文件未找到错误:
f, err := os.Open("filename")
if os.IsNotExist(err) {
// handle missing file
} else if err != nil {
// handle other errors
}
函数os.IsExist,os.IsPermission和is.Timeout检查其他常见错误类型。
答案 1 :(得分:0)
如果你没有清理图书馆,请务必检查godoc。 .below是godoc io URL并阅读更多