go-wrapper
应该做什么?
https://github.com/docker-library/golang/blob/master/go-wrapper
以下评论:
此脚本允许我们获取Go源文件的通用目录 例如“/ go / src / app”并确定规范的“导入路径” 该代码期望生存和引用的位置 “github.com/jsmith/my-cool-app”。然后它将确保这一点 “/go/src/github.com/jsmith/my-cool-app”是“/ go / src / app”的符号链接, 这允许我们在适当的包名下构建和运行它。
据我所知,如果我正在我的github go路径下开发一个项目,那么将它/go/src/app
挂载到一个docker容器中就能使用仍保持不变的导入(github import)正确吗?
COPY . /go/src/app
WORKDIR /go/src/app
RUN go-wrapper download
RUN go-wrapper install
然而,当我尝试使用dep
安装/运行供应商时go get -u github.com/golang/dep/cmd/dep
dep init
dep ensure -update
它将我的repo下载到供应商,然后尝试从那里导入它为什么会这样?
答案 0 :(得分:0)
我不熟悉dep,所以我无法评论那个你问题的一部分。但是,您引用的文本与规范导入路径有关,并且您没有说您使用的是规范导入路径。您必须使用规范导入路径使go-wrapper
的行为与引用中描述的相似。
一旦您的包具有规范导入路径(例如package main // import "github.com/user/projname"
),那么go-wrapper
将识别该特殊注释并创建一个从go/src/github.com/user/projname
到/go/src/app
的符号链接 docker容器。此符号链接将阻止go-wrapper download
从远程(github.com)下载github.com/user/projname/subpackage
等子包。
当我在本地开发时,这种行为对我来说特别有用,因为我想在将它们提交到远程之前测试对子包的本地更改。如果go-wrapper
没有符号链接,那么它将转到远程并下载每个子包,这意味着我将获得旧版本而不是我本地编辑的子包。