用于golang(web项目)实现热更新
我用到的是 fresh 和 realize ,两个都正常热加载,下面来看下,
代码示例是基于gin框架,如果没用到gin,热加载原理是一样的
go get -u github.com/gin-gonic/gin
// 用于更新的示例代码
package main
import (
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/testdata/protoexample"
"net/http"
)
func main() {
r := gin.Default()
// gin.H 是 map[string]interface{} 的一种快捷方式
r.GET("/someJSON", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"message": "hey", "status": http.StatusOK})
})
r.GET("/moreJSON", func(c *gin.Context) {
var msg struct {
Name string `json:"user"`
Message string
Number int
}
msg.Name = "Lena"
msg.Message = "hey"
msg.Number = 43993
// 注意 msg.Name 在 JSON 中变成了 "user"
// 将输出:{"user": "Lena", "Message": "hey", "Number": 123}
c.JSON(http.StatusOK, msg)
})
r.Run(":8085")
}
1:fresh (在windows下测试)
这个比较简单,git地址:https://github.com/gravityblast/fresh
go get github.com/pilu/fresh
先下载 fresh 包,然后进入到你项目的目录,比如我的项目名是 reload_fresh
执行
fresh
这时候浏览器运行,http://localhost:8085/moreJSON
会输出
{
"user": "Lena",
"Message": "hey",
"Number": 43993
}
这个时候把上面的示例代码改为43991,在浏览器打印的Number 为43991
看控制台,
fresh总结:Fresh是一个命令行工具,每次保存Go或模版文件时,该工具都会生成或重新启动Web应用程序。Fresh将监视文件事件,并且每次创建/修改/删除文件时,Fresh都会生成并重新启动应用程序。如果go build返回错误,它会将记录在tmp文件夹中
2: realize (linux ubuntu下测试)
git地址:https://github.com/oxequa/realize
go get github.com/oxequa/realize
// 获取realize包如果报错,window和linux 报错解决方法一样
package golang.org/x/crypto/sha3: unrecognized import path "golang.org/x/crypto/sha3
可执行 go env 查看go的path,进入 path下的src下的golang.org/x 执行,git clone https://github.com/golang/crypto.git
PS:提示什么包找不到就git clone什么包下来,或直接去 https://github.com/golang下载复制到 path下的src下的golang.org/x 下
我项目目录是 reload_realize, go示例代码还是用上面的示例代码 cd 到 reload_realize
执行
realize start
这个时候你可以项目当中看到 多了一个 .realize.yaml
直接修改 .realize.yaml ,可以参考我的内容,我会写注释
settings:
files: // 日志记录文件
outputs:
status: false
path: ""
name: .r.outputs.log
logs:
status: false
path: ""
name: .r.logs.log
errors:
status: true
path: ""
name: .r.errors.log
legacy:
force: false // 是否强制轮询监视程序,这里最好是改为true
interval: 0s // 轮询间隔,可用s 或 ms
server:
status: true // 是否监听服务
open: false // 运行时是否打开浏览器
port: 8085 // 监听的端口,根据你项目监听的端口来写
host: http://0.0.0.0 // 监听地址
schema:
- name: reload_realize // 项目realize名称
path: /web/go/reload_realize // 项目路径
commands: // 支持的go命令
vet:
status: true
fmt:
status: true
args:
- -s
- -w
test:
status: true
method: gb test
generate:
status: true
install:
status: true
build:
status: false
method: gb build
args:
- -race
run:
status: true
watcher:
extensions: // 扩展的监视-go 表示go文件发生变化会进行热加载,如果你还有html 加个 -html
- go
paths:
- /
ignored_paths: // 忽略的路径 根据实际来
- .git
- .realize
- vendor
上面的 .realize.yaml 修改后,执行
realize add
//执行完会看到 下面提示
[10:48:14][REALIZE] : project successfully added
再执行
realize start
就看到,运行成功拉,
这个时候我们 curl , curl "http://0.0.0.0:8085/moreJSON" 会看到返回的json信息,
去修改go代码返回的json信息,再次curl会立马看到变化
end~