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即可,我們開發過程中,不同階段需要幹不同的事兒,

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

轉自:

zhuanlan.zhihu.com/p/345342203

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/-GpHmDlsLLz0xxV9WYxPvQ