golang 热编译辅助脚本

main.bat

@echo off

REM 软件描述
echo *===============================================================
echo  检测 golang 项目源代码,发生变化后编译并运行
echo  注意:该辅助依靠 git 实现,需要手动执行 git init 后再运行该辅助
echo  Powered by c3RydmFsQHFxLmNvbQ== Date: 2021/11/18 Version: 1.0.1
echo *===============================================================

REM 定义项目路径
set projectPath="D:\Go_WorkSpace\src\study"

REM 定义循环次数
set /A i=0

REM 循环检测begin
:labelCheck

REM 检测是否发生变化,若发生变化则执行编译
cd /d %projectPath% && git status | findstr /C:"git" && (git add . & git commit -m fix & start %~dp0sub_compile.bat)

REM 需要间隔1/4秒,否则怕CPU着不住(原本应该是1/4秒的,因为精确到毫秒比较麻烦,再加上git处理也需要时间,那就精确到秒吧)
timeout /T 1 /NOBREAK >nul

REM 打印循环次数
set /A i+=1
set echostr=已检测运行 %i% 次
tasklist /FI "IMAGENAME eq main.exe" /FI "SESSIONNAME eq Console" | findstr /C:"main.exe" >nul || set echostr=%echostr% :-(
echo %echostr%

REM 循环检测end
goto labelCheck

sub_compile.bat

@echo off

REM 编译并运行程序
REM 该文件由其他文件调用

REM 定义项目路径
REM set projectPath="D:\Go_WorkSpace\src\study"
if not defined projectPath (
    echo missing projectPath variable
    ping /n 3 127.0.0.1>nul
    exit
)

REM 杀掉已经运行的程序
taskkill /F /IM main.exe>nul 2>nul

REM 重新编译运行
cd /d %projectPath%\main && go build && main.exe -c ../config.json -t ../public -tp ../templates

REM 延迟几秒后退出,方便运行结果(被其他文件调用时,就没必要延迟退出了)
REM ping /n 3 127.0.0.1>nul

exit