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

1 回复

更多关于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目录中。

基本使用方法

  1. 在你的项目目录中,只需运行:
rerun

rerun会自动检测目录中的.go文件变化,并在文件保存时重新编译运行你的应用。

  1. 如果你想指定特定的构建和运行命令:
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,还有其他类似的工具:

  1. air - 更现代的自动重载工具
  2. fresh - 另一个流行的选择
  3. gowatch - 功能丰富的工具

rerun的优势在于简单易用,适合小型项目和快速原型开发。对于更复杂的项目,可能需要考虑功能更丰富的工具如air。

注意事项

  1. rerun不会自动安装依赖,确保在首次运行前已执行go mod tidy
  2. 生产环境不应使用rerun,它仅用于开发
  3. 如果应用有后台goroutine,确保它们能正确关闭,避免goroutine泄漏

rerun通过简化开发流程,可以显著提高Go应用的开发效率,让你专注于代码而不是重复的构建和重启操作。

回到顶部