Go - 有条件地处理错误
Go - Handle Errors Conditionally
我有一个克隆多个 gitlab 存储库的代码。我依赖的库是"gopkg.in/src-d/go-git.v4"
。如果存储库已经存在,克隆函数将 return 出错。
我想忽略这个错误并继续克隆存储库的循环。下面是我尝试使用 errors.New()
来解决问题,但是,它不起作用,因为 returned 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
的错误 return 定义如下:
https://pkg.go.dev/github.com/go-git/go-git/v5#pkg-variables
ErrRepositoryNotExists = errors.New("repository does not exist")
我已经回答了这个问题
并看到所有遮阳篷都不鼓励使用 err.Error() == err2.Error()
类型的错误处理。
在这种情况下,解决我的问题的正确方法是什么?
那个错误是一个包级别的 var - 本质上是一个单例 - 所以比较是合适的:
err == gitgo.ErrRepositoryNotExists
比较 .Error()
被认为是不好的做法,因为错误文本是偶然的(但假定包导出是可靠的)
我有一个克隆多个 gitlab 存储库的代码。我依赖的库是"gopkg.in/src-d/go-git.v4"
。如果存储库已经存在,克隆函数将 return 出错。
我想忽略这个错误并继续克隆存储库的循环。下面是我尝试使用 errors.New()
来解决问题,但是,它不起作用,因为 returned 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
的错误 return 定义如下:
https://pkg.go.dev/github.com/go-git/go-git/v5#pkg-variables
ErrRepositoryNotExists = errors.New("repository does not exist")
我已经回答了这个问题
err.Error() == err2.Error()
类型的错误处理。
在这种情况下,解决我的问题的正确方法是什么?
那个错误是一个包级别的 var - 本质上是一个单例 - 所以比较是合适的:
err == gitgo.ErrRepositoryNotExists
比较 .Error()
被认为是不好的做法,因为错误文本是偶然的(但假定包导出是可靠的)