golang实时监控源代码变更并自动编译运行插件库dogo的使用
Golang实时监控源代码变更并自动编译运行插件库dogo的使用
安装dogo
使用以下命令安装dogo:
go get github.com/liudng/dogo
创建配置文件
创建一个名为dogo.json
的配置文件,内容如下:
{
"WorkingDir": "{GOPATH}/src/github.com/liudng/dogo/example",
"SourceDir": [
"{GOPATH}/src/github.com/liudng/dogo/example"
],
"SourceExt": [".c", ".cpp", ".go", ".h"],
"BuildCmd": "go build github.com/liudng/dogo/example",
"RunCmd": "example.exe",
"Decreasing": 1
}
配置参数说明
- WorkingDir: 工作目录,dogo会自动切换到此目录
- SourceDir: 源代码目录列表
- SourceExt: 需要监控的文件类型
- BuildCmd: 编译命令
- RunCmd: 程序运行命令(完整路径)
- Decreasing: 忽略的修改次数,仅在构建成功后开始计数(支持Linux和Windows)
启动监控
使用以下命令启动监控:
dogo
或者指定配置文件路径:
dogo -c=/path/to/dogo.json
注意:路径中可以包含{GOPATH}
变量。
完整示例
下面是一个完整的示例,展示如何使用dogo监控和自动编译运行Go项目:
- 首先安装dogo:
go get github.com/liudng/dogo
- 创建一个简单的Go项目(例如在
$GOPATH/src/myproject
):
// main.go
package main
import "fmt"
func main() {
fmt.Println("Hello, Dogo! Watching for changes...")
}
- 创建dogo.json配置文件:
{
"WorkingDir": "{GOPATH}/src/myproject",
"SourceDir": [
"{GOPATH}/src/myproject"
],
"SourceExt": [".go"],
"BuildCmd": "go build myproject",
"RunCmd": "./myproject",
"Decreasing": 1
}
- 启动dogo:
cd $GOPATH/src/myproject
dogo
现在,当你修改项目中的Go文件时,dogo会自动检测更改并重新编译运行你的程序。
屏幕截图
更多关于golang实时监控源代码变更并自动编译运行插件库dogo的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang实时监控源代码变更并自动编译运行插件库dogo的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
使用dogo实现Go代码实时监控与自动编译运行
dogo是一个用Go语言开发的工具,可以监控文件变更并自动重新编译运行Go程序。下面我将详细介绍如何使用dogo来实现Go代码的实时监控和自动编译运行。
安装dogo
首先需要安装dogo工具:
go get github.com/liudng/dogo
基本使用方法
最简单的使用方式是直接在项目目录下运行:
dogo
这会监控当前目录下的所有.go文件,当文件发生变更时自动重新编译运行。
高级配置
dogo支持通过配置文件进行更精细的控制。创建一个dogo.json
配置文件:
{
"watch": [
".",
"../shared"
],
"ignore": [
"vendor",
"*.log"
],
"build": {
"output": "./bin/myapp",
"args": ["-ldflags", "-X main.version=1.0.0"]
},
"run": {
"args": ["--port=8080"],
"env": {
"APP_ENV": "development"
}
},
"notify": {
"sound": true,
"desktop": true
}
}
示例代码
下面是一个完整的示例,展示如何使用dogo开发一个简单的HTTP服务器:
- 首先创建main.go文件:
package main
import (
"fmt"
"net/http"
"os"
)
var version = "0.1.0"
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World! Version: %s\n", version)
})
port := "8080"
if p := os.Getenv("PORT"); p != "" {
port = p
}
fmt.Printf("Server running on :%s\n", port)
http.ListenAndServe(":"+port, nil)
}
- 创建dogo.json配置文件:
{
"watch": ["."],
"ignore": ["vendor", "*.log"],
"build": {
"output": "./bin/server",
"args": ["-ldflags", "-X main.version=1.1.0"]
},
"run": {
"env": {
"PORT": "8080"
}
}
}
- 启动dogo:
dogo
现在,当你修改main.go文件时,dogo会自动重新编译并运行你的HTTP服务器。
自定义构建和运行命令
如果需要更复杂的构建过程,可以使用commands
配置项:
{
"commands": {
"build": "go build -o ./bin/myapp -ldflags '-X main.version=1.0.0'",
"run": "./bin/myapp --port=8080"
}
}
插件开发
dogo特别适合用于开发插件库或微服务。例如,开发一个插件系统:
// main.go
package main
import (
"fmt"
"plugin"
)
func main() {
p, err := plugin.Open("./plugins/hello.so")
if err != nil {
panic(err)
}
sym, err := p.Lookup("Hello")
if err != nil {
panic(err)
}
hello := sym.(func() string)
fmt.Println(hello())
}
// plugins/hello.go
package main
func Hello() string {
return "Hello from plugin!"
}
配置dogo.json来监控和构建插件:
{
"watch": [".", "./plugins"],
"commands": {
"build": "go build -buildmode=plugin -o ./plugins/hello.so ./plugins/hello.go && go build -o ./bin/main",
"run": "./bin/main"
}
}
注意事项
- 在开发过程中,确保你的代码在重新加载时能正确处理资源释放
- 对于数据库连接等持久化资源,考虑使用连接池
- 测试时注意状态管理,避免因热重载导致状态不一致
dogo为Go开发者提供了类似Node.js中nodemon的体验,大大提高了开发效率,特别是在需要频繁修改和测试的场景下。