使用Google Wire构建可变参数函数时遇包查找错误,求排查
Google Wire 命令执行报错的原因及解决办法
1. Vendor 目录导致包查找异常
报错路径指向/opt/workspace/project/vendor/github.com/google/wire/cmd/wire,说明Go模块优先从本地vendor目录查找wire命令包,但该目录下并未包含完整的wire命令代码。
解决方式:
- 若无需保留vendor目录,直接删除该目录后重新执行命令。
- 若需要保留vendor目录,先执行以下命令将所有依赖包同步到vendor:
完成后再尝试运行wire命令。go mod vendor
2. 推荐全局安装Wire命令
使用go run方式运行wire会受模块依赖、vendor配置影响,稳定性较差。更稳妥的方式是全局安装wire命令:
go install github.com/google/wire/cmd/wire@latest
安装完成后,直接在项目目录下执行:
wire ./internal/wire
即可正常生成依赖注入代码。
3. 补充:你的Wire初始化代码存在逻辑问题
除了命令执行的问题,当前的初始化函数写法有误:
wire.Build应该传入构造函数而非类型,你当前写的repository.RepositoryRegistry是类型,正确的应该是repository.NewRepositoryRegistry。- 还需要将
db、UserRepository等依赖的提供函数或构造函数加入wire.Build参数,示例如下:func initializeRepository(cfg *config.Config) (*repository.RepositoryRegistry, error) { wire.Build( provideDB, // 假设该函数负责提供db实例 repository.NewUserRepository, repository.NewRepositoryRegistry, ) return nil, nil }
内容的提问来源于stack exchange,提问作者Rodrigo
相关产品推荐
相关产品推荐

