GO111MODULE=on
golang:1.15.2-alpine
我在本地项目中实现了一些功能,我想在将更改推送到远程存储库之前确认行为。
但是我的项目无法访问新包。
当 docker-compose run 'go build' 我得到他的错误。
'github.com/Asuha-a/URLShortener/api/pb/url' 和 'github.com/Asuha-a/URLShortener/api/utility' 都不存在于远程仓库中,因为它还没有被推送。
main.go:10:2: module github.com/Asuha-a/URLShortener/api@latest found (v0.0.0-20201114002535-3dac2ebd322a), but does not contain package github.com/Asuha-a/URLShortener/api/pb/url
main.go:12:2: module github.com/Asuha-a/URLShortener/api@latest found (v0.0.0-20201114002535-3dac2ebd322a), but does not contain package github.com/Asuha-a/URLShortener/api/utility
我删除了一些看起来与此问题无关的文件。
$ tree
.
├── api
│ ├── Dockerfile
│ ├── go.mod
│ ├── go.sum
│ ├── main.go
│ ├── pb
│ │ ├── url // new package
│ │ ├── url_grpc.pb.go
│ │ ├── url.pb.go
│ │ └── url.proto
│ ├── services
│ │ ├── url
│ │ │ ├── db
│ │ │ │ ├── settings.go
│ │ │ │ └── url.go
│ │ │ ├── Dockerfile
│ │ │ ├── go.mod
│ │ │ ├── go.sum
│ │ │ └── main.go // failed building
│ └── utility // new package
│ ├── jwt.go
│ └── url.go
├── docker-compose.yml
我发现了这个问题。
在 Go 中不推送代码的情况下导入包的本地更改
这表示我可以通过添加“替换 MODULE_URL => /PATH/TO/MODULE/DIR”来访问本地包。
我像这样编辑了“api/services/url/go.mod”。
module github.com/Asuha-a/URLShortener/api/services/url
go 1.15
replace github.com/Asuha-a/URLShortener/api => ../../.
require (
github.com/jackc/pgx/v4 v4.9.2 // indirect
github.com/satori/go.uuid v1.2.0
golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9 // indirect
golang.org/x/text v0.3.4 // indirect
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
google.golang.org/grpc v1.33.2
gorm.io/datatypes v1.0.0
gorm.io/driver/postgres v1.0.5
gorm.io/gorm v1.20.6
)
但我收到了这个错误:
main.go:10:2: module github.com/Asuha-a/URLShortener/api@latest found (v0.0.0-20201114002535-3dac2ebd322a, replaced by ../../.), but does not contain package github.com/Asuha-a/URLShortener/api/pb/url
main.go:12:2: module github.com/Asuha-a/URLShortener/api@latest found (v0.0.0-20201114002535-3dac2ebd322a, replaced by ../../.), but does not contain package github.com/Asuha-a/URLShortener/api/utility
然后我尝试了完整路径'/home/asuha/go/src/github.com/Asuha-a/URLShortener/api'。
但我收到了这个错误:
main.go:10:2: github.com/Asuha-a/URLShortener/[email protected]: replacement directory /home/asuha/go/src/github.com/Asuha-a/URLShortener/api does not exist
main.go:12:2: github.com/Asuha-a/URLShortener/[email protected]: replacement directory /home/asuha/go/src/github.com/Asuha-a/URLShortener/api does not exist
如何修复此错误?
先说一些基础知识:
github.com/anyone/someproject
github.com/anyone/someproject
必须有一个导入路径,例如github.com/anyone/someproject/whatever/hierarchy/pkgname
replace
从同一个模块打包。replace
用于更换其他模块。你声明了模块
module github.com/Asuha-a/URLShortener/api/services/url
这使您的模块名称为“github.com/Asuha-a/URLShortener/api/services/url”,并且仅具有导入路径的包,如模块“github.com/Asuha-a/URLShortener/api/services/url/I /really/like/deeply/nested/stuff" 将属于该包。
显然你的utility
包(顺便说一句。不要做这样的包,这是基本的代码味道!)不属于你的模块:你可能尝试将它导入为“github.com/Asuha-a/URLShortener/api/utiliyt”但这不是模块“github.com/Asuha-a/URLShortener/api/services/url”的一部分。
该文件夹utility
位于go.mod
文件系统中的文件“下方”这一事实并不能推翻您的模块在其第一行声明的事实:“我所有的包的导入路径都以 github.com/Asuha-a/URLShortener/api/ 开头服务/网址!其他任何东西都不属于我!”
您可能至少应该命名您的模块module github.com/Asuha-a/URLShortener/api
(如果没有module github.com/Asuha-a/URLShortener
)。
我敦促您(重新)阅读“如何编写 Go 代码”并坚持下去。
要点:模块实际上只是一组具有相同导入路径前缀(模块名称)版本化的包。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句