Golang Go语言中的go-watcher热重载轮子

Golang Go语言中的go-watcher热重载轮子

go-watcher

Go Report Card GoReportCard

Golang 编写的热重载工具,自定义命令,支持监视文件及路径配置,环境变量配置。这是一个重复的轮子~

安装使用

go install github.com/yeqown/go-watcher/cmd/go-watcher

命令行

➜  go-watcher git:(master) ✗ ./go-watcher -h   
NAME:
   go-watcher - A new cli application

USAGE: go-watcher [global options] command [command options] [arguments…]

VERSION: 2.0.0

AUTHOR: [email protected]

COMMANDS: init generate a config file to specified postion run execute a command, and watch the files, if any change to these files, the command will reload help, h Shows a list of commands or help for one command

GLOBAL OPTIONS: –help, -h show help –version, -v print the version

配置文件

watcher:                   # 监视器配置
  duration: 2000           # 文件修改时间间隔,只有高于这个间隔才回触发重载
  included_filetypes:      # 监视的文件扩展类型
  - .go                    # 
  excluded_regexps:        # 不被监视更改的文件正则表达式
  - ^.gitignore$
  - '*.yml$'
  - '*.txt$'
additional_paths: []       # 除了当前文件夹需要额外监视的文件夹
excluded_paths:            # 不需要监视的文件名,若为相对路径,只能对于当前路径生效
- vendor
- .git
envs:                      # 额外的环境变量
- GOROOT=/path/to/your/goroot
- GOPATH=/path/to/your/gopath

使用范例日志

➜  go-watcher git:(master) ✗ ./package/osx/go-watcher run -e "make" -c ./config.yml
[INFO] directory (/Users/yeqown/Projects/opensource/go-watcher) is under watching
[INFO] directory (/Users/yeqown/Projects/opensource/go-watcher/cmd) is under watching
[INFO] directory (/Users/yeqown/Projects/opensource/go-watcher/cmd/go-watcher) is under watching
[INFO] directory (/Users/yeqown/Projects/opensource/go-watcher/internal) is under watching
[INFO] directory (/Users/yeqown/Projects/opensource/go-watcher/internal/command) is under watching
[INFO] directory (/Users/yeqown/Projects/opensource/go-watcher/internal/log) is under watching
[INFO] directory (/Users/yeqown/Projects/opensource/go-watcher/internal/testdata) is under watching
[INFO] directory (/Users/yeqown/Projects/opensource/go-watcher/internal/testdata/exclude) is under watching
[INFO] directory (/Users/yeqown/Projects/opensource/go-watcher/internal/testdata/testdata_inner) is under watching
[INFO] directory (/Users/yeqown/Projects/opensource/go-watcher/package) is under watching
[INFO] directory (/Users/yeqown/Projects/opensource/go-watcher/package/archived) is under watching
[INFO] directory (/Users/yeqown/Projects/opensource/go-watcher/package/linux) is under watching
[INFO] directory (/Users/yeqown/Projects/opensource/go-watcher/package/osx) is under watching
[INFO] directory (/Users/yeqown/Projects/opensource/go-watcher/resources) is under watching
[INFO] directory (/Users/yeqown/Projects/opensource/go-watcher/utils) is under watching
[INFO] directory (/Users/yeqown/Projects/opensource/go-watcher/utils/testdata) is under watching
[INFO] directory (/Users/yeqown/Projects/opensource/go-watcher/utils/testdata/testdata_inner) is under watching
rm -fr package
go build -o package/osx/go-watcher cmd/go-watcher/main.go
GOOS=linux GOARCH=amd64 go build -o package/linux/go-watcher cmd/go-watcher/main.go
mkdir -p package/archived
tar -zcvf package/archived/go-watcher.osx.tar.gz package/osx
a package/osx
a package/osx/go-watcher
tar -zcvf package/archived/go-watcher.linux.tar.gz package/linux
a package/linux
a package/linux/go-watcher
[INFO] command executed done!
[INFO] (/Users/yeqown/Projects/opensource/go-watcher/package/osx/go-watcher) is skipped, not target filetype
[INFO] (/Users/yeqown/Projects/opensource/go-watcher/package/osx) is skipped, not target filetype
[INFO] (/Users/yeqown/Projects/opensource/go-watcher/package) is skipped, not target filetype
[INFO] (/Users/yeqown/Projects/opensource/go-watcher/package/linux/go-watcher) is skipped, not target filetype
[INFO] (/Users/yeqown/Projects/opensource/go-watcher/package/linux) is skipped, not target filetype
[INFO] (/Users/yeqown/Projects/opensource/go-watcher/package/archived/go-watcher.linux.tar.gz) is skipped, not target filetype
[INFO] (/Users/yeqown/Projects/opensource/go-watcher/package/archived) is skipped, not target filetype
[INFO] (/Users/yeqown/Projects/opensource/go-watcher/VERSION) is skipped, not target filetype
[INFO] [/Users/yeqown/Projects/opensource/go-watcher/cmd/go-watcher/main.go] changed
rm -fr package
mkdir -p package/osx
mkdir -p package/linux
echo "2.0.0" > VERSION
cp VERSION package/osx
cp VERSION package/linux
go build -o package/osx/go-watcher cmd/go-watcher/main.go
GOOS=linux GOARCH=amd64 go build -o package/linux/go-watcher cmd/go-watcher/main.go
mkdir -p package/archived
tar -zcvf package/archived/go-watcher.osx.tar.gz package/osx
a package/osx
a package/osx/go-watcher
a package/osx/VERSION
tar -zcvf package/archived/go-watcher.linux.tar.gz package/linux
a package/linux
a package/linux/go-watcher[INFO] (/Users/yeqown/Projects/opensource/go-watcher/package/osx) is skipped, not target filetype
[INFO] (/Users/yeqown/Projects/opensource/go-watcher/package/linux) is skipped, not target filetype

a package/linux/VERSION [INFO] command executed done! [INFO] (/Users/yeqown/Projects/opensource/go-watcher/package/osx) is skipped, not target filetype [INFO] (/Users/yeqown/Projects/opensource/go-watcher/package/archived) is skipped, not target filetype [INFO] (/Users/yeqown/Projects/opensource/go-watcher/package) is skipped, not target filetype [INFO] (/Users/yeqown/Projects/opensource/go-watcher/VERSION) is skipped, not target filetype [INFO] (/Users/yeqown/Projects/opensource/go-watcher/package) is skipped, not target filetype ^C[INFO] quit signal captured! [INFO] go-watcher exited ➜ go-watcher git:(master) ✗

1 回复

更多关于Golang Go语言中的go-watcher热重载轮子的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Golang(Go语言)生态系统中,go-watcher 是一个用于实现热重载(hot-reload)功能的第三方库。热重载是一种开发时非常有用的特性,它允许开发者在代码更改后无需手动重启应用程序,而是自动重新加载代码,从而极大地提高了开发效率。

go-watcher 通过监控文件系统的变化来检测代码的更新。一旦检测到相关文件被修改,它会自动触发应用程序的重新加载。这种机制对于快速迭代和测试非常有帮助,尤其是在开发Web应用或微服务时。

使用go-watcher通常涉及以下几个步骤:

  1. 引入库:首先,你需要在项目中引入go-watcher库。

  2. 配置监控:设置要监控的文件或目录。

  3. 处理重载逻辑:编写代码以在检测到变化时执行重载操作,比如重启服务器或重新加载配置。

  4. 启动监控:启动go-watcher,使其开始监控文件系统的变化。

需要注意的是,虽然热重载在开发过程中非常方便,但在生产环境中使用时需要谨慎。因为不当的热重载可能会导致数据丢失或服务中断。因此,在生产环境中,通常建议采用更稳健的部署和更新策略,如滚动更新或蓝绿部署。

总之,go-watcher是一个强大的工具,可以显著提高Go语言开发者的开发效率。然而,在使用时需要根据具体场景和需求进行配置和测试,以确保其稳定性和可靠性。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!