Go -有条件地处理错误



我有一个代码,我克隆多个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的错误,看到所有的答案都不鼓励使用err.Error() == err2.Error()类型的错误处理。

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

这个错误是一个包级别的变量——本质上是一个单例——所以比较是合适的:

err == gitgo.ErrRepositoryNotExists

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