我有一个代码,我克隆多个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()
被认为是不好的做法,因为错误文本是偶然的(但包导出被认为是可靠的)