golang自动重新编译和运行Go应用插件库rerun的使用
golang自动重新编译和运行Go应用插件库rerun的使用
简介
rerun是一个用于在源代码更改时自动重新编译和重新运行Go应用程序的工具。
特性
- 指定要忽略的文件/目录列表
- 指定要监视的文件后缀(.go, .html等)
- 提供应用程序参数
- 支持通过CLI标志和/或JSON文件进行配置
- 跨平台支持(Linux, OSX, Windows)
安装
go get github.com/ivpusic/rerun
使用
基本用法
使用默认设置运行:
rerun
CLI标志
rerun -a arg1,arg2 -i bower_components,node_modules,test
详细模式
rerun -v
JSON配置
创建conf.json文件:
{
"ignore": ["some/path/to/ignore1", "some/path/to/ignore2"],
"args": ["dev", "test"],
"suffixes": [".go", ".html", ".tpl"],
"attrib": true
}
然后运行:
rerun -c conf.json
rerun支持默认配置加载:如果在项目目录中存在名为.rerun.json
的文件(从执行rerun的位置),它将自动加载,无需指定-c
标志。
CLI + JSON
如果相同的选项由CLI标志和JSON配置提供,则来自CLI的选项将生效。
JSON配置示例:
{
"ignore": ["some/path/to/ignore"]
}
然后运行:
rerun -a arg1,arg2 -c conf.json
环境变量
可以在配置中使用环境变量。
Linux/OSX
{
"ignore": ["$GOPATH/hello/how/are/you"]
}
Windows
{
"ignore": ["%GOPATH%/hello/how/are/you"]
}
通配符路径
{
"ignore": ["/some/path", "/some/other/**/*.go"]
}
与Vagrant一起使用
如果使用Vagrant作为开发环境,编辑的更改不会在guest端触发通知事件,这意味着rerun无法检测更改。但是,如果安装vagrant-notify-forwarder插件,可以让rerun与其一起工作:
vagrant plugin install vagrant-notify-forwarder
然后,使用以下命令监视文件:
rerun --attrib -c conf.json
许可证
MIT
更多关于golang自动重新编译和运行Go应用插件库rerun的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang自动重新编译和运行Go应用插件库rerun的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用rerun实现Go应用自动重新编译和运行
rerun是一个Go语言的工具,它可以监视文件变化并自动重新编译和运行你的Go应用程序,非常适合开发阶段使用。
安装rerun
go install github.com/ivpusic/rerun@latest
安装完成后,rerun
命令将被添加到你的$GOPATH/bin
目录中。
基本使用方法
- 在你的项目目录中,只需运行:
rerun
rerun会自动检测目录中的.go
文件变化,并在文件保存时重新编译运行你的应用。
- 如果你想指定特定的构建和运行命令:
rerun -build="go build -o myapp" -run="./myapp"
高级配置
rerun支持通过配置文件.rerun
来定义更复杂的行为:
{
"watch": ["./cmd", "./internal"],
"ignore": ["vendor", "*.log"],
"build": "go build -o myapp",
"run": "./myapp --port=8080",
"delay": 500
}
watch
: 要监视的目录列表ignore
: 要忽略的文件模式build
: 构建命令run
: 运行命令delay
: 文件更改后等待的毫秒数(防抖)
实际示例
假设我们有一个简单的web应用,目录结构如下:
myapp/
├── main.go
├── handlers/
│ └── handler.go
└── .rerun
main.go内容:
package main
import (
"fmt"
"net/http"
"myapp/handlers"
)
func main() {
http.HandleFunc("/", handlers.HomeHandler)
fmt.Println("Server running on :8080")
http.ListenAndServe(":8080", nil)
}
handlers/handler.go内容:
package handlers
import (
"fmt"
"net/http"
)
func HomeHandler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
}
.rerun配置文件:
{
"watch": [".", "./handlers"],
"build": "go build",
"run": "./myapp",
"delay": 300
}
运行rerun:
rerun
现在,当你修改任何.go文件并保存时,rerun会自动重新编译并重启你的应用。
集成到开发工作流
你可以将rerun集成到Makefile中:
dev:
rerun
然后只需运行:
make dev
替代方案
除了rerun,还有其他类似的工具:
rerun的优势在于简单易用,适合小型项目和快速原型开发。对于更复杂的项目,可能需要考虑功能更丰富的工具如air。
注意事项
- rerun不会自动安装依赖,确保在首次运行前已执行
go mod tidy
- 生产环境不应使用rerun,它仅用于开发
- 如果应用有后台goroutine,确保它们能正确关闭,避免goroutine泄漏
rerun通过简化开发流程,可以显著提高Go应用的开发效率,让你专注于代码而不是重复的构建和重启操作。