当你经常在涉及Golang的大型项目中工作时,不断地输入构建和测试命令go build xx,go test xx ,往往是很耗时的。而且往往这些命令本身可能变得非同小可。
Makefile提供了一个非常有效的方法来为我们的应用程序自动编写任务。
让我们了解一下,我们如何使用makefiles轻松地设置我们的工作流程!
注意:虽然make工具链广受欢迎,但它只限于UNIX平台。因此,如果你使用Windows,你可能需要在Windows里面安装一个Linux环境(比如msys /WSL )来使用make命令。
在Go中使用Makefiles
Makefile的主要功能用途是使用 "标签 "轻松运行不同的任务。使用标签,make TAGNAME 将简单地运行对应于TAGNAME 的任务。
因此,让我们假设一个示例程序main.go 。如果你想构建这个文件,你通常会运行这个命令。
go build main.go
而如果你想直接执行该程序,你会这样做。
go build -o main.out main.go
./main.out
然而,用一个makefile ,你可以创建2个任务build 和run 来代替。
BINARY_NAME=main.out
build:
go build -o ${BINARY_NAME} main.go
run:
go build -o ${BINARY_NAME} main.go
./${BINARY_NAME}
clean:
go clean
rm ${BINARY_NAME}
现在,你可以像这样运行build 和run 任务。
make build
make run
如果你想添加一个默认标签,调用必要的任务,我们可以使用all 标签。
BINARY_NAME=main.out
all: build test
build:
go build -o ${BINARY_NAME} main.go
test:
go test -v main.go
run:
go build -o ${BINARY_NAME} main.go
./${BINARY_NAME}
clean:
go clean
rm ${BINARY_NAME}
现在,这将构建和测试我们的main.go 程序,当我们运行时:
make
看到我们的工作现在变得多么容易了吗?这就是为什么这些构建工具链是非常有用的!
请注意,你可以在makefile中使用shell变量。变量BINARY_NAME ,实际上就是main.out ,所以美元符号将执行变量替换。
最重要的是,你不需要到此为止。你可以根据你的需要运行尽可能多的复杂任务。
例如,如果你的项目有多个依赖项,你需要使用go get package-name ,你也可以将其自动化。
我们可以创建一个单独的任务,叫做deps ,它将直接安装所有相关的软件包。
例如,如果我的项目需要Gorilla websocket库,我可以有一个这样的任务。
deps:
go get github.com/gorilla/websocket
而当我运行
make deps
所有的依赖项都会被安装。
希望这篇文章能让你了解如何自动化构建任务并快速设置你的Golang项目工作流程。直到下一次!