分享一个使用Go
编写的极简单的Demo案例,为什么要分享呢?涉及到几个小知识点
Go mod
的使用- GO中如何导入包
- 通过Go简单的演示分层构建
- 演示如何编写一个自动化构建的脚本式Jenkinfile.
1. Go mod
如何使用
我们准备一个apis模块,在该模块中实现一个打印字符串的函数Says(str string)
:所以
mkdir apis
cat << EOF > ./apis.go
package apis
import "fmt"
func Says(str string) {
fmt.Printf("hello,%s", name)
}
然后我们初始化一下go mod
go env -w GO111MODULE="auto"
go mod init code.kubemaster.top/DevOpsTeam/apis
# 此时查看一下mod文件的内容为:
cat go.mod
module code.kubemaster.top/DevOpsTeam/apis
go 1.14
然后工作区内生成一个go.mod
文件
然后我们初始化提交到代码仓库中即可,代码仓库的地址为https://code.kubemaster.top/DevOpsTeam/apis.git
,
2. 如何导入包
接下来应该编写Demo了,Demo依赖apis
模块实现功能,Demo的文件名为main.go
:
package main
import "code.kubemaster.top/DevOpsTeam/apis"
func main() {
apis.Says("云原生·生态圈\n")
}
这里有个注意的地方:
当程序调用的模块与模块的文件名不一致的时候,需要通过别名
引入,否则直接import
即可:
# 实际上模块名为apis,但是此处文件名是api,所以需要通过别名解决
import m_api "code.kubemaster.top/DevOpsTeam/api"
当需要运行和构建main.go
的时候:
go get -insecure code.kubemaster.top/DevOpsTeam/apis
go run main.go
到这里基本上就明确go mod
的基础使用了,然后我们将其提交代码到代码仓库:https://code.kubemaster.top/DevOpsTeam/goci.git
。
3. 应该怎样构建Go程序
使用Docker构建镜像,首先要准备一个Dockerfile
,仔细思考一下,Go编写的程序会直接编译成指定编译架构的二进制文件,所以我们可以通过分层构建的方式首先在Go的环境中进行构建,再把构建后的二进制文件拷贝到微小镜像内,以便减小镜像的体积,下面写了一个Dockerfile的案例:
FROM golang:1.14 as builder
WORKDIR /go/src/code.kubemaster.top/DevOpsTeam/demos/
ARG ARCH="amd64"
ARG OS="linux"
COPY main.go .
RUN go get -insecure code.kubemaster.top/DevOpsTeam/apis && \
CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
FROM alpine:latest
WORKDIR /root/
COPY --from=builder /go/src/code.kube