前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang搭配 makefile 真香!

golang搭配 makefile 真香!

作者头像
用户3904122
发布2022-06-29 14:40:22
3430
发布2022-06-29 14:40:22
举报
文章被收录于专栏:光华路程序猿

这篇文章打算跟大家聊聊Makefiles,作为一个后端开发者,熟练掌握Makefiles咖啡可以多喝几口。书归正传

golang内置了很多 go commands 可以帮助我们完成go每个阶段的开发工作,但是很多时候我们需要分享我们的代码给其他人,初次看到我们代码工程的人可能并不知道怎么让它跑起来。当然你也可以通过README.md或者其他方式来告知读者。

但对于那些只想快速构建程序的人来说,使用Makefile很好得抽象了技术细节,当我们看到Makefile文件时自然能想到使用make或者make install来构建程序。从此告别记忆长串的命令疯狂敲键盘 偶尔还会敲错的尴尬场景😅

比如:

代码语言:javascript
复制
go build -o hello hello.go
./hello

使用Makefile,我们可以很轻松自定义一个target完成这个任务

代码语言:javascript
复制
.PHONY: buildandrun
BIN_FILE=hello

buildandrun:
        @go build -o "${BIN_FILE}" hello.go
        ./"${BIN_FILE}"

然后我们就可以用如下命令完成工作了

代码语言:javascript
复制
make
./"hello"
hello world

我们真正上线构建编译时的命令可能是这样的 :

代码语言:javascript
复制
go install -tags="${BUILD_TAGS}" -ldflags "-X version.version=$(VERSION) -X version.date=$(DATE) -X version.commit=$(COMMIT) -X version.branch=$(BRANCH) -w -s" -gcflags=all="-N -l " ./...

装配上Makefile,我们仅仅敲4个字符 make即可,我们开发过程中,不同阶段需要干不同的事儿,

  • 清理编译中间目标文件
  • 跑测试case
  • 检查测试覆盖率
  • 执行代码检查 等等

Makefile的goal机制对这种情况进行了很好的抽象,以下是我工作当中的Makefile的配置,虽然不是很复杂但真的很有用。

代码语言:javascript
复制
.PHONY: all build clean run check cover lint docker help
BIN_FILE=hello
all: check build
build:
 @go build -o "${BIN_FILE}"
clean:
 go clean
 rm --force "xx.out"
test:
 go test
check:
 go fmt ./
 go vet ./
cover:
 go test -coverprofile xx.out
 go tool cover -html=xx.out
run:
 ./"${BIN_FILE}"
lint:
 golangci-lint run --enable-all
docker:
    @docker build -t leo/hello:latest .
help:
 @echo "make 格式化go代码 并编译生成二进制文件"
 @echo "make build 编译go代码生成二进制文件"
 @echo "make clean 清理中间目标文件"
 @echo "make test 执行测试case"
 @echo "make check 格式化go代码"
 @echo "make cover 检查测试覆盖率"
 @echo "make run 直接运行程序"
 @echo "make lint 执行代码检查"
 @echo "make docker 构建docker镜像"

总结

使用Makefile来管理我们程序的构建,减少了大量输入、拼写错误,简化构建项目的难度。真实线上环境配合CI/CD更佳,如果你还没有尝试使用Makefile,那真的可以试试。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 光华路程序猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 总结
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档