Modd 热编译重启 Go 项目

1,495 阅读1分钟

前言

相信很多人在 Go 开发,以及其他语言开发时都会碰到,项目代码改动一个地方,就需要手动编译一次,我也是被这个问题困恼很久,直到我碰见了 go-zero-looklook 项目的作者。

安装

Go 安装

$ env GO111MODULE=on go get github.com/cortesi/modd/cmd/modd

Homebrew 安装

$ brew install modd

使用

在项目中新增 modd.conf 配置如下:

# captcha
app/captcha/cmd/rpc/** pkg/** {
    prep: go build -o build/server/captcha-rpc -v app/captcha/cmd/rpc/captcha.go
    daemon +sigkill: ./build/server/captcha-rpc -f app/captcha/cmd/rpc/etc/captcha-dev.yaml
}
app/captcha/cmd/api/** pkg/** {
    prep: go build -o build/server/captcha-api -v app/captcha/cmd/api/captcha.go
    daemon +sigkill: ./build/server/captcha-api -f app/captcha/cmd/api/etc/captcha-dev.yaml
}

# passport
app/passport/cmd/rpc/** pkg/** {
    prep: go build -o build/server/passport-rpc -v app/passport/cmd/rpc/passport.go
    daemon +sigkill: ./build/server/passport-rpc -f app/passport/cmd/rpc/etc/passport-dev.yaml
}
app/passport/cmd/api/** pkg/** {
    prep: go build -o build/server/passport-api -v app/passport/cmd/api/passport.go
    daemon +sigkill: ./build/server/passport-api -f app/passport/cmd/api/etc/passport-dev.yaml
}

启动

  • 很简单,终端环境下就一个命令
modd

说明

  • app/captcha/cmd/rpc/** pkg/** 代表需要监控这两个目录下的改动
  • prep 表示如何编译程序
  • daemon +sigkill 表示程序如何杀死并启动

具体更多语法命令,请前往 github.com/cortesi/mod… 查看

结尾

这个真的很好用,跨项目,跨语言,尤其适合微服务开发,结合 Docker 容器镜像,打包到镜像里面,可以实现一个容器启动 N 个服务,无需污染宿主机。