为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 在 docker 和requirements.txt 中构建等效内容

Golang 在 docker 和requirements.txt 中构建等效内容

Go
茅侃侃 2023-07-04 17:06:47
我知道Golang requests.txt 等效项,但问题的上下文相当不同。我正在尝试优化 docker 容器内的 golang 程序的构建。我的 dockerfile 看起来像这样:FROM golang:1.12.5 as builderWORKDIR $GOPATH/src/test-ldap/COPY main.go .RUN go get -d -v ./......虽然我main.go看起来像package mainimport (  "log"  "fmt"  "gopkg.in/ldap.v3")func main() {...当然,每次我更改源代码时,docker 层COPY main.go .都会更改,因此go get需要重新运行命令,并且即使import块未更改也无法从 docker 构建缓存中重用。现在我当然可以输入类似的内容RUN go get -d -v log fmt gopkg.in/ldap.v3并将其放在COPY声明之前,但这违反了所谓的单一事实来源原则。如果我希望添加额外的导入,我将不得不在代码库中的两个不同位置更改相同的内容。如何将导入要求存储在单独的文件中?在 Go 开发中执行此操作的惯用方法是什么?
查看完整描述

1 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

使用Go 模块。然后,go.mod像对待以下文件一样对待生成的文件requirements.txt

FROM golang:1.12.5 as builder


# NOT in $GOPATH (or explicitly set GO111MODULES=on)

WORKDIR /usr/src/test-ldap/


COPY go.mod .

RUN go mod download  # alternatively: "go mod vendor" to build a vendor/ dir instead


COPY main.go .

# ...


查看完整回答
反对 回复 2023-07-04
  • 1 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信