之前用django编写web应用时,每次保存,django应用都是重新加载-热更新,最近在写gin应用,了解到golang常用的热更新可以用到fresh/gin/gowatch/bee/realize/air等,本文主要分享realize的热更新应用。
realize
举个例子,有个叫demo的gin web项目,首先是下载realize:
go get github.com/oxequa/realize
# realize这个开源项目有点老了,官方4年都没有维护,但依然比gin(与web框架不同的gin),在go get时注意在go.mod中添加下面一行:
# replace gopkg.in/urfave/cli.v2 => github.com/urfave/cli/v2 v2.2.0
go install github.com/oxequa/realize
.realize.yaml
在安装了realize cmd后,可以直接使用realize init
完成realize初始化,或者比较常用的可以参考官方的文档,编写自己的yaml配置文件,以下以.realize.yaml
做后续分享。
settings:
files: # 日志记录文件设置
outputs:
status: false
path: ""
name: .r.outputs.log
logs:
status: false
path: ""
name: .r.logs.log
errors:
status: false
path: ""
name: .r.errors.log
legacy:
force: false # 是否强制轮询,最好设置为true
interval: 100ms # 轮询间隔,可设为10s || 100ms
server:
status: true # 是否监听服务
open: false # 运行时是否打开浏览器
port: 8080 # 监听端口,根据app server的监听端口来设置
host: http://localhost # 监听地址/主机
schema:
- name: server # 项目名称
path: D:\go_dev\src\server # 项目路径
# args: # run传入参数
# - --key1=value1
# - --key2=value2
commands: # 支持的go命令,go run/go build/go install
run:
status: true
install:
status: true
build:
status: false
args:
- -race
method: gb build
watcher: # 监视文件
extensions: # 监视.go/.yaml文件
- go
- yaml
paths: # 监视的目录
- /
ignore: # 忽略某些文件
paths: # 忽略文件目录名
- .git
- .realize
- vendor
- logs
scripts: # 执行脚本
- command: tskill server # 重载时杀掉应用,win: tskill process_name || linux/macos: pkill process_name
type: before # 执行脚本时机,这里设置启动前
项目使用
回到项目主目录,首先realize add
,然后realize start
即可启动项目,可以修改监听项中的go文件或者yaml文件,就可以看到realize确实重新加载编译了应用。