網站首頁 編程語言 正文
背景
構建和測試大型項目時都會很耗時,且容易出錯。開發者在開發過程中需要不斷執行go build、go run 、go test等相關命令。還可能需要多個命令來構建不同平臺的二進制文件。在正式部署時候,我們可能還需要安裝一些依賴項,或者在發布之前進行代碼覆蓋率測試等相關前置工作。
整個過程需要很多步驟,但我們有一種簡單的方法可以解決這些復雜瑣碎的步驟。使用 Make 進行自動執行任務。它通過單個命令簡化開發并自動執行重復性任務。
Make 可以幫我們做很多事情:測試、構建、清理、安裝 Go 項目。
創建項目并運行
首先我們先創建一個簡單的項目,創建一個 main.go 文件。為了運行項目,我們需要構建項目并運行二進制文件:
go build main.go
當我們創建 Go 項目然后會遇到需要不同的二進制名稱并且需要在特定的操作系統中創建構建,那么可以通過指定環境進行構建:
# 指定 macos系統 GOARCH=amd64 GOOS=darwin go build -o hello-darwin main.go # 指定 Linux 操作系統 GOARCH=amd64 GOOS=linux go build -o hello-linux main.go go run hello
如果在開發部署過程中,我們不僅要記住這些命令然后遇到不同環境輸入命令執行。在這個過程中你可能會發生輸錯命令等行為。
使用 Makefile 可以協助我們高效工作,因為它可以幫助我們簡化上述命令,甚至可以為特定命令指定規則并運行簡單的 make 命令,這樣不僅可以讓你免去記住這些命令和環境的關系。
添加 Makefile 文件
在當前項目的根目錄下創建一個 Makefile 文件,設置內容如下:
BINARY_NAME=hello build: GOARCH=amd64 GOOS=darwin go build -o hello-darwin main.go GOARCH=amd64 GOOS=linux go build -o hello-linux main.go run: ./${BINARY_NAME} build_and_run:build run clean: go clean rm ${BINARY_NAME}-darwin rm ${BINARY_NAME}-linux
創建完 Makefile 文件后,就可以通過這些簡單的命令進行編譯和運行你的 Go 項目:
make run make build # 也可以使用在 makefile 中定義的一個命令:build_and_run make build_and_run # 使用清除命令清除二進制文件 make clean
以上命令相對于一開始的命令更簡單,使用簡單,也可以避免因輸出命令導致的相關錯誤。
Makefile
概念
make 命令都是來源于 Makefile 文件的。其都是由一系列的規則構成。每條規則都是由目標、依賴項、命令組成。
- 目標 Target:make 命令通過目標名稱執行具體命令。如上的 make run
- 依賴項 Dependencies:目標可以具有需要在運行目標之前執行的依賴項
- 配方 recipe:運行目標時將執行的實際命令
變量
Makefiles 也有使用變量的機制。在以上的 Makefile 文件中,可以看到 ${BINARY_NAME} 的變量。所以當我們有相同的內容時可以通過添加變量進行替換。
可以使用 = 或 := 定義變量。
= 將遞歸擴展變量。 這將替換它被替換時的值。以下例子在運行 all 命令時,它會將 x 的值替換為最后更新的值。因此將打印:later bar
。 例如:
x = foo y = $(x) bar x = later all: echo $(y)
但是當你使用 := 進行變量賦值時,將打印第一次的值,比如:
x := foo y := $(x) bar x := later all: echo $(y) > foo bar
更多使用 makefile 命令,可以參考:makefiletutorial.com/
使用 Makefile 自動化任務
在開發項目時,可以將一些測試,運行測試覆蓋,管理依賴等工作,我們都可以創建一個 Makefile ,并在文件中包含自動化這些任務的所有規則:
BINARY_NAME=hello build: GOARCH=amd64 GOOS=linux go build -o ${BINARY_NAME}-linux main.go run: ./${BINARY_NAME} build_and_run: build run clean: go clean rm ${BINARY_NAME}-linux test: go test ./... test_coverage: go test ./... -coverprofile=coverage.out dep: go mod download vet: go vet lint: golangci-lint run --enable-all
使用這個簡單的 Makefile,您現在可以輕松地執行命令來運行任務。這樣就輕松自動化解決工作。
make test make test_coverage make dep make vet make lint
參考資料:
https://www.jb51.net/article/256709.htm
tutorialedge.net/golang/make…
原文鏈接:https://juejin.cn/post/7123593834591682590
相關推薦
- 2022-05-13 修復Qt程序長時間運行控件停止刷新
- 2022-04-03 Rust?連接?SQLite?數據庫的過程解析_相關技巧
- 2022-09-21 使用注解實現Redis緩存功能_Redis
- 2022-06-01 kubernetes中的namespace、node、pod介紹_云和虛擬化
- 2023-01-20 pandas中df.groupby()方法深入講解_python
- 2022-03-15 redis編譯報致命錯誤:jemalloc/jemalloc.h:沒有那個文件或目錄
- 2022-05-06 Docker?刪除及清理鏡像的方法_docker
- 2023-05-08 C語言單鏈表的圖文示例講解_C 語言
- 最近更新
-
- 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同步修改后的遠程分支