docker go-wrapper脚本如何工作

时间:2017-10-25 03:35:26

标签: docker go

嘿,任何人都可以向我解释码头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下载到供应商,然后尝试从那里导入它为什么会这样?

1 个答案:

答案 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没有符号链接,那么它将转到远程并下载每个子包,这意味着我将获得旧版本而不是我本地编辑的子包。