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项目:

  1. 首先安装dogo:
go get github.com/liudng/dogo
  1. 创建一个简单的Go项目(例如在$GOPATH/src/myproject):
// main.go
package main

import "fmt"

func main() {
    fmt.Println("Hello, Dogo! Watching for changes...")
}
  1. 创建dogo.json配置文件:
{
    "WorkingDir": "{GOPATH}/src/myproject",
    "SourceDir": [
        "{GOPATH}/src/myproject"
    ],
    "SourceExt": [".go"],
    "BuildCmd": "go build myproject",
    "RunCmd": "./myproject",
    "Decreasing": 1
}
  1. 启动dogo:
cd $GOPATH/src/myproject
dogo

现在,当你修改项目中的Go文件时,dogo会自动检测更改并重新编译运行你的程序。

屏幕截图

windows screen


更多关于golang实时监控源代码变更并自动编译运行插件库dogo的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于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服务器:

  1. 首先创建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)
}
  1. 创建dogo.json配置文件:
{
  "watch": ["."],
  "ignore": ["vendor", "*.log"],
  "build": {
    "output": "./bin/server",
    "args": ["-ldflags", "-X main.version=1.1.0"]
  },
  "run": {
    "env": {
      "PORT": "8080"
    }
  }
}
  1. 启动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"
  }
}

注意事项

  1. 在开发过程中,确保你的代码在重新加载时能正确处理资源释放
  2. 对于数据库连接等持久化资源,考虑使用连接池
  3. 测试时注意状态管理,避免因热重载导致状态不一致

dogo为Go开发者提供了类似Node.js中nodemon的体验,大大提高了开发效率,特别是在需要频繁修改和测试的场景下。

回到顶部