網站首頁 編程語言 正文
1. go介紹
Go官方 提供一個名為go的命令,該命令可以用來下載go的依賴,構建安裝go應用,運行和測試 Go程序等等, 我們比較常用的比如go get, go mod, go run , go test等等。
但是,我們在 Go 項目中為了簡化使用 go 命令的復雜性,規范團隊使用 go 命令的方式,提升個人或團隊的生產力,我們會使用makefile腳本,使用make來處理一些任務。
2. make及makefile
makefile可以看作是make工具的腳本文件, 而make主要用來處理一系列命令。常用的比如用來編譯和打包文件, 在C/C++的編譯打包中應用最廣泛了。
makefile文件結構其實也比較簡單:
target ... : prerequisites ... command ... ...
target
可以是一個object file(目標文件),也可以是一個執行文件,還可以是一個標簽(label)。對于標簽這種特性,在后續的“偽目標”章節中會有敘述。
prerequisites
生成該target所依賴的文件和/或target
command
該target要執行的命令(任意的shell命令)
makefile文件主要定義了執行目標應用, 它依賴哪些文件或者目標, 以及當前目標需要執行的command指令。有依賴項,他會先去執行依賴項的command。
具體的學習可以參考:makefile介紹 — 跟我一起寫Makefile 1.0 文檔
3. 使用makefile編譯打包go應用
這里我們使用makefile來簡單實現一個將go應用變異打包為不同系統的應用的示例:
.PHONY: all run clean help APP = task ## linux: 編譯打包linux .PHONY: linux linux: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build $(RACE) -o ./bin/${APP}-linux64 ./main.go ## win: 編譯打包win .PHONY: win win: CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build $(RACE) -o ./bin/${APP}-win64.exe ./main.go ## mac: 編譯打包mac .PHONY: mac mac: CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build $(RACE) -o ./bin/${APP}-darwin64 ./main.go build: @go build -o ${APP} ## 編譯win,linux,mac平臺 .PHONY: all all:win linux mac run: @go run ./ .PHONY: tidy tidy: @go mod tidy ## test: Run unit test. .PHONY: test test: @$(MAKE) go.test ## 清理二進制文件 clean: @if [ -f ./bin/${APP}-linux64 ] ; then rm ./bin/${APP}-linux64; fi @if [ -f ./bin/${APP}-win64.exe ] ; then rm ./bin/${APP}-win64.exe; fi @if [ -f ./bin/${APP}-darwin64 ] ; then rm ./bin/${APP}-darwin64; fi help: @echo "make - 格式化 Go 代碼, 并編譯生成二進制文件" @echo "make mac - 編譯 Go 代碼, 生成mac的二進制文件" @echo "make linux - 編譯 Go 代碼, 生成linux二進制文件" @echo "make win - 編譯 Go 代碼, 生成windows二進制文件" @echo "make tidy - 執行go mod tidy" @echo "make run - 直接運行 Go 代碼" @echo "make clean - 移除編譯的二進制文件" @echo "make all - 編譯多平臺的二進制文件"
4. 一些go項目的makefile參考 kratos微服務框架makefile
項目地址:kratos/Makefile at main · go-kratos/kratos · GitHub
kratos應用使用makefile文件打包,它比我們示例多添加了go工具的環境配置部分,還有自動生成使用gen工具編譯proto文件,我們可以根據實際項目需要添加。
iam身份識別系統使用makefile
項目地址:
iam項目使用makefile更多,它分為一個入口的makefile文件,同時它引入了項目scripts目錄下的多個功能的腳本,如下圖。 它將每個功能部分干的事情分拆到不同腳本文件,這樣更清晰。提供的功能也更清晰細致。
原文鏈接:https://blog.csdn.net/keenw/article/details/126052878
相關推薦
- 2022-11-06 Go+Redis實現延遲隊列實操_Golang
- 2022-08-14 協同開發巧用gitignore中間件避免網絡請求攜帶登錄信息_Golang
- 2022-07-29 pytest?fixtures函數及測試函數的參數化解讀_python
- 2022-05-06 golang導入私有倉庫報錯:“server response: not found:xxx: in
- 2022-07-03 python中dict獲取關鍵字與值的實現_python
- 2021-12-15 git_stats?web代碼圖形統計工具詳解_其它綜合
- 2022-06-12 C#集合之有序列表的用法_C#教程
- 2022-03-27 Python編程入門指南之函數_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支