用于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下测试)

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下测试)

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~