来自属于同一项目的单独包的未定义导入
Undefined import from a separate package that is part of the same project
这是 GitHub 上的 project/repo 的结构:
|-grpc_definitions
|--v0
|---myservice.pb.go
|---myservice.proto
|-api
我fork了这个项目,在本地添加了一些东西;这是新结构:
|-grpc_definitions
|--v0
|---myservice.pb.go
|---myservice.proto
|---new_service.pb.go
|---new_service.proto
|-api
|--myservice.go
在 api/myservice.go
中,我导入了 grpc 定义:
package api
import grpc_definitions_v0 "github.com/<username>/<repo>/grpc_definitions/v0"
var s grpc_definitions_v0.NewServiceServer // this line does not compile
var ss grpc_definitions_v0.ServiceServer // this line is fine
go.mod
对于 api
:
module github.com/<<owner>>/<<repo>>/api
go 1.14
require (
github.com/<<owner>>/<<repo>>/grpc_definitions v0.0.0-20200723024905-6c479f56d135
...
)
如果我查看 new_service.pb.go
,NewServiceServer
已定义并且是正确包的一部分。它导入所有已经存在的东西就好了,只有我添加的东西导入不正确。
如果我查看 grpc_definitions_v0.ServiceServer
的定义,它看起来像是 导入 grpc_definitions_v0
的特定提交 而不是本地文件.
如何获取我的代码以导入文件 added/changed?
编辑:我尝试 go get
从提交中进行更改,但由于我正在处理 repo 的分支,它说:module declares its path as: github.com/<<owner>>/<<repo>>/grpc_definitions but was required as: github.com/<<me>>/<<repo>>/grpc_definitions
我通过在终端中对 go mod
使用 replace
来修复此问题:
$ go mod edit -replace="github.com/<<owner>>/<<repo>>/grpc_definitions=/<<localpathtoclone>>/<<repo>>/grpc_definitions"
这指向它使用本地文件。查看更多信息:Using forked package import in Go
这是 GitHub 上的 project/repo 的结构:
|-grpc_definitions
|--v0
|---myservice.pb.go
|---myservice.proto
|-api
我fork了这个项目,在本地添加了一些东西;这是新结构:
|-grpc_definitions
|--v0
|---myservice.pb.go
|---myservice.proto
|---new_service.pb.go
|---new_service.proto
|-api
|--myservice.go
在 api/myservice.go
中,我导入了 grpc 定义:
package api
import grpc_definitions_v0 "github.com/<username>/<repo>/grpc_definitions/v0"
var s grpc_definitions_v0.NewServiceServer // this line does not compile
var ss grpc_definitions_v0.ServiceServer // this line is fine
go.mod
对于 api
:
module github.com/<<owner>>/<<repo>>/api
go 1.14
require (
github.com/<<owner>>/<<repo>>/grpc_definitions v0.0.0-20200723024905-6c479f56d135
...
)
如果我查看 new_service.pb.go
,NewServiceServer
已定义并且是正确包的一部分。它导入所有已经存在的东西就好了,只有我添加的东西导入不正确。
如果我查看 grpc_definitions_v0.ServiceServer
的定义,它看起来像是 导入 grpc_definitions_v0
的特定提交 而不是本地文件.
如何获取我的代码以导入文件 added/changed?
编辑:我尝试 go get
从提交中进行更改,但由于我正在处理 repo 的分支,它说:module declares its path as: github.com/<<owner>>/<<repo>>/grpc_definitions but was required as: github.com/<<me>>/<<repo>>/grpc_definitions
我通过在终端中对 go mod
使用 replace
来修复此问题:
$ go mod edit -replace="github.com/<<owner>>/<<repo>>/grpc_definitions=/<<localpathtoclone>>/<<repo>>/grpc_definitions"
这指向它使用本地文件。查看更多信息:Using forked package import in Go