Golang项目使用github.com/golang-jwt/jwt/v5库时构建报错如何解决

Golang项目使用github.com/golang-jwt/jwt/v5库时构建报错如何解决 我正在创建一个使用某些库的应用程序,这些库实现了golang-jwt/jwt/v5用于身份验证。当我编译项目时,它会在一个vendor文件夹中下载依赖项,其中也包含github.com/golang-jwt/jwt/v5文件夹。当我构建项目时,出现了一个错误:

github.com/golang-jwt/jwt/v5

vendor/github.com/golang-jwt/jwt/v5/errors_go_other.go:57:13: undefined: any vendor/github.com/golang-jwt/jwt/v5/errors_go_other.go:60:12: undefined: any vendor/github.com/golang-jwt/jwt/v5/errors_go_other.go:63:12: undefined: any make: *** [Makefile:7: build] Error 2

我尝试通过在文件中声明“type any = interface{}”并重新构建来修复此问题,但这次是从本地vendor文件夹而不是从GitHub下载。构建成功。但是当我运行应用程序时,出现了一个错误:

2023-06-02T13:36:39.843Z WARN jwt auth/jwt.go:54 unable to refresh JWKS keys environmental variable OIDC_SERVER_URL is not set Can’t reach the OIDC server to refresh JWKS

是否有针对jwt/v5的补丁来解决上述问题?我尝试了不同的Go版本,直到go1.20,但仍然出现此错误。请帮助我。


更多关于Golang项目使用github.com/golang-jwt/jwt/v5库时构建报错如何解决的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang项目使用github.com/golang-jwt/jwt/v5库时构建报错如何解决的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这个错误是因为 any 类型在 Go 1.18 中引入,但你的 vendor 目录中的代码可能是在更早的 Go 版本下生成的。以下是解决方案:

1. 更新 Go 版本

确保使用 Go 1.18 或更高版本:

go version
# 应该显示 go1.18 或更高

2. 清理 vendor 目录并重新下载依赖

# 删除 vendor 目录
rm -rf vendor

# 清理 go mod 缓存
go clean -modcache

# 重新下载依赖
go mod vendor

3. 如果问题仍然存在,更新 jwt 库到最新版本

# 更新到最新版本
go get github.com/golang-jwt/jwt/v5@latest

# 或者指定具体版本
go get github.com/golang-jwt/jwt/v5@v5.2.0

# 然后重新 vendor
go mod vendor

4. 检查 go.mod 文件

确保 go.mod 中指定了正确的 Go 版本:

// go.mod 文件应该包含
go 1.18
// 或更高版本

5. 如果使用 vendor,确保同步

# 同步 vendor 目录
go mod tidy
go mod vendor

6. 完整构建示例

# 清理并重新构建
go clean
go build -mod=vendor ./...

7. 关于 OIDC_SERVER_URL 错误

这个错误与编译问题无关,是运行时环境变量未设置:

// 在代码中检查环境变量
if os.Getenv("OIDC_SERVER_URL") == "" {
    log.Fatal("OIDC_SERVER_URL environment variable is required")
}

// 或者在运行前设置
export OIDC_SERVER_URL="https://your-oidc-server.com"

主要问题在于 vendor 目录中的代码与你的 Go 版本不兼容。清理 vendor 目录并重新下载依赖通常能解决 undefined: any 错误。

回到顶部