整合热加载

热加载 和 热部署

  • 热加载:代码进行修改时,程序能重新加载(部分代码),减少手动编译
  • 热部署:代码修改时,程序能重新加载(整个应用或容器),热部署比热加载更为强大

Go实现热加载工具库

Air

  • 彩色日志输出
  • 自定义构建或二进制命令
  • 支持忽略子目录
  • 启动后支持监听新目录
  • 更好的构建过程

Get Air

  • go get -u github.com/cosmtrek/air

How to use Air

    1. 进入到项目目录
    1. 生成.air.conf文件: 首先在当前目录下查找 .air.conf配置文件,如果找不到就使用默认的
      air -c .air.conf
    1. air_emxaple.conf:
      # [Air](https://github.com/cosmtrek/air) TOML 格式的配置文件

      # 工作目录
      # 使用 . 或绝对路径,请注意 `tmp_dir` 目录必须在 `root` 目录下
      root = "."
      tmp_dir = "tmp"

      [build]
      # 只需要写你平常编译使用的shell命令。你也可以使用 `make`
      # Windows平台示例: cmd = "go build -o tmp\main.exe ."
      cmd = "go build -o ./tmp/main ."
      # 由`cmd`命令得到的二进制文件名
      # Windows平台示例:bin = "tmp\main.exe"
      bin = "tmp/main"
      # 自定义执行程序的命令,可以添加额外的编译标识例如添加 GIN_MODE=release
      # Windows平台示例:full_bin = "tmp\main.exe"
      full_bin = "APP_ENV=dev APP_USER=air ./tmp/main"
      # 监听以下文件扩展名的文件.
      include_ext = ["go", "tpl", "tmpl", "html"]
      # 忽略这些文件扩展名或目录
      exclude_dir = ["assets", "tmp", "vendor", "frontend/node_modules"]
      # 监听以下指定目录的文件
      include_dir = []
      # 排除以下文件
      exclude_file = []
      # 如果文件更改过于频繁,则没有必要在每次更改时都触发构建。可以设置触发构建的延迟时间
      delay = 1000 # ms
      # 发生构建错误时,停止运行旧的二进制文件。
      stop_on_error = true
      # air的日志文件名,该日志文件放置在你的`tmp_dir`
      log = "air_errors.log"

      [log]
      # 显示日志时间
      time = true

      [color]
      # 自定义每个部分显示的颜色。如果找不到颜色,使用原始的应用程序日志。
      main = "magenta"
      watcher = "cyan"
      build = "yellow"
      runner = "green"

      [misc]
      # 退出时删除tmp目录
      clean_on_exit = true

Fresh

  • Fresh 是一个命令行工具,每次保存Go或模版文件时,该工具都会生成或重新启动Web应用程序。Fresh将监视文件事件,并且每次创建/修改/删除文件时,Fresh都会生成并重新启动应用程序。如果go build返回错误,它会将记录在tmp文件夹中

Get Fresh

  • go get github.com/pilu/fresh

How to use fresh

  • 执行cmd启动项目:fresh
  • 出现”fresh: 未找到命令”:添加软链接、sudo ln -s ~/go/bin/fresh /usr/bin

Bee(Beego)

  • bee 工具是一个为了协助快速开发 beego 项目而创建的项目,通过 bee 您可以很容易的进行 beego 项目的创建、热编译、开发、测试、和部署。类似于前端框架vue的脚手架工具vue-cli

Get Bee

  • go get github.com/beego/bee

How to use Bee

  • new:new 命令是新建一个 Web 项目,我们在命令行下执行 bee new <项目名> 就可以创建一个新的项目。但是注意该命令必须在 $GOPATH/src 下执行
  • api:上面的 new 命令是用来新建 Web 项目,不过很多用户使用 beego 来开发 API 应用。所以这个 api 命令就是用来创建 API 应用的
  • run:bee run 命令是监控 beego 的项目,通过fsnotify监控文件系统。但是注意该命令必须在 $GOPATH/src/appname 下执行

Gowatch

  • 通过监听当前目录下的相关文件变动,进行实时编译

Get gowatch

  • go get github.com/silenceper/gowatch

Use gowatch

  • -o : 非必须,指定build的目标文件路径
  • -p : 非必须,指定需要build的package(也可以是单个文件)
  • -args: 非必须,指定程序运行时参数,例如:-args=’-host=:8080,-name=demo’
  • -v: 非必须,显示gowatch版本信息
  • 使用gowatch.yml文件:
    # gowatch.yml 配置示例

    # 当前目录执行下生成的可执行文件的名字,默认是当前目录名
    appname: "test"
    # 指定编译后的目标文件目录
    output: /bin/demo
    # 需要追加监听的文件名后缀,默认只有'.go'文件
    watch_exts:
    - .yml
    # 需要监听的目录,默认只有当前目录
    watch_paths:
    - ../pk
    # 在执行命令时,需要增加的其他参数
    cmd_args:
    - arg1=val1
    # 在构建命令时,需要增加的其他参数
    build_args:
    - -race
    # 需要增加环境变量,默认已加载当前环境变量
    envs:
    - a=b
    # 是否监听 ‘vendor’ 文件夹下的文件改变
    vendor_watch: false
    # 不需要监听的目录名字
    excluded_paths:
    - path
    # main 包路径,也可以是单个文件,多个文件使用逗号分隔
    build_pkg: ""
    # build tags
    build_tags: ""

    # 是否禁止自动运行
    disable_run: false

Gin

  • gin是用于实时重新加载Go Web应用程序的简单命令行实用程序。只需gin在您的应用程序目录中运行,您的网络应用程序将 gin作为代理提供。gin检测到更改后,将自动重新编译您的代码。您的应用在下次收到HTTP请求时将重新启动

Get gin

  • go get github.com/codegangsta/gin gin -h

Use gin

  • gin run main.go
  • options:

realize

  • 高性能实时刷新。
  • 同时管理多个项目。
  • 通过自定义扩展名和路径观看。
  • 支持所有Go命令。
  • 在不同的Go版本之间切换。
  • 项目的自定义环境变量。
  • 在文件更改前后或全局执行自定义命令。
  • 将日志和错误导出到外部文件。
  • 分步项目初始化。
  • 重新设计的面板,显示构建错误,控制台输出和警告。

Get realize

  • go get github.com/oxequa/realize

Use realize

# 首先进行初始化 默认配置即可
$ realize init
# 执行项目
$ realize start
# 添加命令
$ realize add
# 删除命令
$ realize init