go使用makefile

转自:golang搭配 makefile 真香! - 知乎

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

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

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

比如:

go build -o hello hello.go
./hello

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

.PHONY: buildandrun
BIN_FILE=hello

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

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

make
./"hello"
hello world

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

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的配置,虽然不是很复杂但真的很有用。

.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,那真的可以试试。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值