这是我参与「第三届青训营 -后端场」笔记创作活动的的第5篇笔记。
我们在编写微服务程序的过程中,常常会遇到需要单机进行微服务调试以及修改的需求。而微服务又因为需要同时开启多个服务,如果手动一个个进行命令行的输入会显得非常麻烦且费时。在调试本期青训营的抖音项目时,我就遇到了这样的问题,接下来就简单介绍一下如何在Windows下使用bat脚本文件帮助我们处理这些简单而又重复的工作。
项目结构/目录
这次以我们小组的抖音项目为例,展示一下微服务常用的项目目录结构,项目地址:github.com/chaossat/ti…
项目结构示意图:
将所有的微服务分别打包,放在项目service目录下,这样可以让项目结构非常简明易懂,提高代码可读性
采用go run命令编写bat文件
根据目录结构,我们可以很轻易地在tiktak目录下写出如下bat脚本:
start go run main.go
start go run service/favoriteaction/server.go
start go run service/favoritelist/server.go
start go run service/feed/server.go
start go run service/followaction/server.go
start go run service/followerlist/server.go
start go run service/followlist/server.go
start go run service/login/loginServer.go
start go run service/publist/server.go
start go run service/register/server.go
start go run service/userinf/server.go
start go run service/comment/server.go
这样写法的脚本优点是十分简单,不会在项目目录下产生go build后的exe文件
当然,这种写法也具有一定的缺点,比如go run会隐式调用go build,产生的临时exe文件很容易逃开回收,从而堆积在系统盘的temp文件夹中。同时隐式调用go build也会导致启动时间的增加,如果开启了防火墙,还需要每次将新生成的exe文件加入白名单,于是,我们可以想到第二种写法
采用go build命令编写bat文件
为了解决go run命令的临时文件带来的一系列问题,比较直接的解决方案就是显式调用go build,自己进行exe文件的管理。于是我们可以稍作修改,在tiktak目录下写出如下bat脚本:
go build main.go
cd service/favoriteaction
go build server.go
cd ../favoritelist
go build server.go
cd ../feed
go build server.go
cd ../followaction
go build server.go
cd ../followerlist
go build server.go
cd ../followlist
go build server.go
cd ../login
go build server.go
cd ../publist
go build server.go
cd ../register
go build server.go
cd ../userinf
go build server.go
cd ../comment
go build server.go
cd ../..
start main.exe
start service/favoriteaction/server.exe
start service/favoritelist/server.exe
start service/feed/server.exe
start service/followaction/server.exe
start service/followerlist/server.exe
start service/followlist/server.exe
start service/login/server.exe
start service/publist/server.exe
start service/register/server.exe
start service/userinf/server.exe
start service/comment/server.exe
显式调用go build有以下几个优点:
- 多次开启服务时,不会对已有应用程序进行重复编译,减少了服务启动的时间
- 运行产生的窗口将会显示不同的路径,而不是统一#GOROOT#/bin/go.exe,方便我们进行调试
- 可以自己进行exe文件的管理,不用担心临时文件逃脱回收
因此一般情况下比较推荐使用第二种使用go build的脚本写法,只有实在怕麻烦的情况下才会考虑使用第一种采用go run的写法