下面由golang教程栏目给大家分享5种文件变更时自动重载Go程序的方法,希望对需要的朋友有所帮助!

Go

许多人希望在写GO时拥有实时加载代码(热编译)的效果,特别是那些习惯使用 JavaScript,Python和Ruby等解释语言的人,本文介绍了5种实时重新加载Go程序的方法。

本文假设已安装Go编译器,并且已将GOPATH/bin路径添加到PATH环境变量中。

在开始之前,我们先创建一个简单的web服务器,可以返回响应内容”Hello,World”。

package mainimport (    "net/http")func main() {    http.HandleFunc("/", func (w http.ResponseWriter, r *http.Request) {        w.Write([]byte("Hello, World"))    })    http.ListenAndServe(":5000", nil)}

Method 1: 使用Air

Air 是一个命令行程序,可以为Go程序提供实时代码加载。

通过运行以下命令来安装Air。

go get -u github.com/cosmtrek/air

下一步,在使用项目的根目录中创建Air配置文件.air.conf

# .air.conf# toml配置文件来源于 [Air](https://github.com/cosmtrek/air)# 工作区间# .(当前目录)或绝对路径, 注意这些目录都在根目录下面.root = "." tmp_dir = "tmp"[build]# 只是普通的shell命令。 可以使用`make`。cmd = "go build -o ./tmp/main ."# `cmd`配置命令输出的二进制文件的位置。bin = "tmp/main"# 自定义二进制输出。full_bin = "APP_ENV=dev APP_USER=air ./tmp/main"# 监听的文件扩展后缀列表。include_ext = ["go", "tpl", "tmpl", "html"]# 忽略这些文件扩展名或目录。exclude_dir = ["assets", "tmp", "vendor", "frontend/node_modules"]# 如果指定,则监听包含这些文件。include_dir = []# 忽略文件列表.exclude_file = []# 如果文件修改太频繁,则不必在每次修改时都立刻触发构建,设置触发等待时间。delay = 1000 # ms# 发生编译错误时,是否停止旧的二进制程序。stop_on_error = true# 该日志文件放置在tmp_dir中。log = "air_errors.log"[log]# 日志是否显示时间time = false[color]# 自定义每类输出的颜色。 如果找不到这个颜色,使用原本的日志输出演示。main = "magenta"watcher = "cyan"build = "yellow"runner = "green"[misc]# 退出时是否删除临时目录clean_on_exit = true

配置是简单明了的,请根据你的项目情况去调整。

最后,不要使用常用的go run命令来运行Go程序,而应使用air命令来启动程序。

Method 2: docker运行Ari

这种方法需要使用docker,如果你没有安装,可以按照

我们仍将使用Air库,因此仍然需要Air配置文件。 如果你还没有,请创建一个配置文件。

Docker镜像cosmtrek/air附带安装了Air命令,并且GOPATH环境变量设置为/go

我们只需要将我们的项目目录挂载到Docker容器的GOPATH中,并使用-p暴露需要使用的端口即可。 我们可以通过运行docker run命令来实现这一点:

docker run -it --rm -w <WORKING_DIR> -v <PROJECT_FOLDER>:<MOUNT_POINT> -p <HOST_PORT>:<CONTAINER_PORT> <IMAGE_NAME>

就我而言,我需要运行以下命令:

docker run -it --rm -w /go/src/github.com/praveen001/live-reloading -v /go/src/github.com/praveen001/live-reloading:/go/src/github.com/praveen001/live-reloading -p 5000:5000 cosmtrek/air

解释:

使用-v参数将项目目录 /home/praveen/go/src/github.com/praveen001/live-reloading 挂载到容器里面的GOPATH中的目录/go/src/github.com/praveen001/live-reloading

-v /home/praveen/go/src/github.com/praveen001/live-reloading:/go/src/github.com/praveen001/live-reloading

使用-w参数指定挂载目录成工作目录。

-w /go/src/github.com/praveen001/live-reloading

Web服务器正在监听端口5000,因此需要使用-p标志将容器端口5000暴露到主机端口5000。

-p 5000:5000

最后,指定docker镜像名称cosmtrek / air

Method 3: 使用Gin

Gin是另一个用于实时重新加载Go应用程序的命令行程序。

通过运行以下命令来安装Gin。

go get github.com/codegangsta/gin

而不是使用通常的go run main.go命令运行应用程序,而是使用gin命令。

就我而言,--appPort参数告诉Gin监听端口5000,--port参数告诉Gin代理监听端口3000端口

gin --appPort 5000 --port 3000

现在使用地址http://localhost:3000访问Gin程序.

如果要排除监听那个目录可以使用--excludeDir参数,例如:

gin --appPort 5000 --port 3000 --excludeDir ./frontend

如果你项使用Gin实现加载没有启动端口监听的程序,你们必须使用--immediate参数。但是Gin仍然会去5000端口。

你可以在这找到所有受支持的参数Gin的Github.

Method 4: 使用Nodemon

Nodemon是另一个用于实时重新加载Node应用程序的命令行程序。 但是可以通过使用--exec参数设置启动命令用于启动其他应用程序。

Nodemon需要安装Nodejs和NPM。 如果没有安装,可以按照nodejs的官方文档进行安装.

运行以下命令来安装nodemon:

npm install -g nodemon

现在,我们可以通过运行以下命令来使用Nodemon运行Web服务器:

nodemon --exec go run main.go --signal SIGTERM

如果要配置Nodemon,请在项目的根目录中创建配置文件nodemon.json。 完整可用的示例配置文件

Method 5: 使用Fresh

Fresh 是另一个GO实现的用于实时重新加载Go的程序

安装Fresh

go get github.com/pilu/fresh

而不是使用常用的go run main.go命令来运行应用程序,而是使用fresh命令。

fresh

要配置Fresh,需要在项目的根目录中创建一个配置文件runner.conf

这是一个示例配置文件。

root:              .tmp_path:          ./tmpbuild_name:        runner-buildbuild_log:         runner-build-errors.logvalid_ext:         .go, .tpl, .tmpl, .htmlno_rebuild_ext:    .tpl, .tmpl, .htmlignored:           assets, tmpbuild_delay:       600colors:            1log_color_main:    cyanlog_color_build:   yellowlog_color_runner:  greenlog_color_watcher: magentalog_color_app:

总结

还有许多其他工具,例如:

  • Facebook’s Watchman
  • Realize
  • Reflex
  • Even a custom–built solution

原文地址:https://techinscribed.com/5-ways-to-live-reloading-go-applications/

译文地址:https://learnku.com/go/t/51189

更多相关文章

  1. go语言中run与build命令的区别是什么?
  2. go语言常用命令有哪些
  3. 关于golang封装一个bash函数,用于执行bash命令
  4. godoc命令不存在的解决方法
  5. 利用xmllint命令处理xml
  6. 熔断器 Hystrix 源码解析 —— 命令合并执行
  7. 熔断器 Hystrix 源码解析 —— 命令执行(一)之正常执行逻辑
  8. git命令备忘系列(一):基础命令
  9. 熔断器 Hystrix 源码解析 —— 命令执行(三)之执行超时

随机推荐

  1. Centos7下安装与卸载Jdk1.8
  2. 写在2012里的2011总结
  3. 简单的程序发布流程
  4. 从零开始的linux 第十三章
  5. Linux FFmpeg 编译so动态库
  6. 如何使用virtualenv安装wxPython
  7. Bash命令在启动时没有找到rvm, Mint
  8. Linux设备驱动剖析之Input(三)
  9. Linux和Windows下查看、设置环境变量的比
  10. 这个冬天,他们实现了梦想中的华丽转身…