整合热加载
整合热加载
热加载 和 热部署
- 热加载:代码进行修改时,程序能重新加载(部分代码),减少手动编译
- 热部署:代码修改时,程序能重新加载(整个应用或容器),热部署比热加载更为强大
Go实现热加载工具库
Air
- 彩色日志输出
- 自定义构建或二进制命令
- 支持忽略子目录
- 启动后支持监听新目录
- 更好的构建过程
Get Air
go get -u github.com/cosmtrek/air
How to use Air
- 进入到项目目录
- 生成
.air.conf文件
: 首先在当前目录下查找.air.conf
配置文件,如果找不到就使用默认的
air -c .air.conf
- 生成
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
# 首先进行初始化 默认配置即可 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Joohwan!
评论