登录
首页 >  Golang >  Go问答

Go - 有条件地处理错误

来源:stackoverflow

时间:2024-02-13 18:42:24 137浏览 收藏

大家好,我们又见面了啊~本文《Go - 有条件地处理错误》的内容中将会涉及到等等。如果你正在学习Golang相关知识,欢迎关注我,以后会给大家带来更多Golang相关文章,希望我们能一起进步!下面就开始本文的正式内容~

问题内容

我有一个代码,可以在其中克隆多个 gitlab 存储库。我依赖的库是“gopkg.in/src-d/go-git.v4”。如果存储库已存在,克隆函数将返回错误。

我想忽略这个错误并继续克隆存储库的循环。下面是我尝试使用 errors.new() 解决问题,但是,由于返回的 err 和新错误不匹配,因此它不起作用。

import (
   gitgo "gopkg.in/src-d/go-git.v4"
   "log"
   "errors"

)

var errrepoisthere = errors.new("repository already exists")

_, err := gitgo.plainclone(repolocalpath, false, &gitgo.cloneoptions{})


if !errors.is(err, errrepoisthere) {
      log.fatal(err)
    
}

gitgo.plainclone 返回的错误定义如下:

https://pkg.go.dev/github.com/go-git/go-git/v5#pkg-variables

ErrRepositoryNotExists = errors.New("repository does not exist")

我已经解决了这个问题 如何比较 go 错误并发现所有 awnsers 都不鼓励使用 err.error() == err2.error() 类型的错误处理。

在这种情况下,解决我的问题的正确方法是什么?


正确答案


该错误是一个包级别的 var - 本质上是一个单例 - 因此比较是合适的:

err == gitgo.ErrRepositoryNotExists

比较 .error() 被认为是不好的做法,因为错误文本是偶然的(但假设包导出是可靠的)

本篇关于《Go - 有条件地处理错误》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>