Golang错误和文档

时间:2018-05-31 23:53:56

标签: go runtime-error

遗憾的是,标准库中的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库来加载配置文件。 如果配置文件不存在,我想继续(它将使用默认值)。但是如果存在权限错误,我希望将错误视为致命错误。问题是,提前错误看起来并不完全清楚。

2 个答案:

答案 0 :(得分:3)

使用os.IsNotExist检查文件未找到错误:

f, err := os.Open("filename")
if os.IsNotExist(err) {
  // handle missing file
} else if err != nil {
  // handle other errors
}

函数os.IsExistos.IsPermissionis.Timeout检查其他常见错误类型。

osio和其他包声明特定错误的变量。

答案 1 :(得分:0)

如果你没有清理图书馆,请务必检查godoc。 .below是godoc io URL并阅读更多

https://godoc.org/io