在项目中使用了go的kafka库confluent-kafka-go,go run运行正常。因为开发环境是MacOS,部署环境是基于centos的docker镜像使用二进制运行,在使用env GOOS=linux GOARCH=amd64 go build -o ./main ./main.go
交叉编译时却报错了。
经过查询在TonyBai老师的文章中找到了答案。
但是对于我的机器,似乎开启CGO_ENABLED都不生效。
为了避免环境的影响以及本机安装依赖库的繁琐,选择了通过在docker镜像进行打包来规避。以下为操作步骤:
1:编写Dockerfile文件在项目同级目录编写Dockerfile文件,以本人项目business-product-sync为例,基于golang:1.16镜像,参考如下:
FROM golang:1.16
LABEL AUTHOR vince@hyx.com
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ADD ./business-product-sync /go/src/business-product-sync/
CMD cd business-product-sync
CMD go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
CMD go env -w GOPRIVATE=gogs.miz.so
CMD go mod tidy
2:运行Docker镜像docker build -t business-product-sync:v0.15 .
docker run --rm -it business-product-sync:v0.15 bash
3:进入镜像进行编译CMD CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -tags netgo -o ./main ./main.go
这里因为比较消耗资源,可以适当将docker的占用CPU和内存调大,否则镜像会挂。
4:将编译成功的二进制文件复制到本机使用docker cp
命令将镜像中的生成二进制文件复制到本机
docker cp fdc68fb3d2fe:/go/src/business-product-sync/main
以上操作完成基本就完成了整个的编译过程了。
参考地址Cross-compilation support:https://github.com/confluentinc/confluent-kafka-go/issues/119
Go社区主流Kakfa客户端简要对比:https://tonybai.com/2022/03/28/the-comparison-of-the-go-community-leading-kakfa-clients/
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款