登录  /  注册
首页 > 后端开发 > Golang > 正文

分享5种文件变更时自动重载Go程序的方法

藏色散人
发布: 2020-11-03 15:19:58
转载
2643人浏览过

下面由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></image_name></container_port></host_port></mount_point></project_folder></working_dir>
登录后复制

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

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:          ./tmp
build_name:        runner-build
build_log:         runner-build-errors.log
valid_ext:         .go, .tpl, .tmpl, .html
no_rebuild_ext:    .tpl, .tmpl, .html
ignored:           assets, tmp
build_delay:       600colors:            1log_color_main:    cyan
log_color_build:   yellow
log_color_runner:  green
log_color_watcher: magenta
log_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

以上就是分享5种文件变更时自动重载Go程序的方法的详细内容,更多请关注php中文网其它相关文章!

智能AI问答
PHP中文网智能助手能迅速回答你的编程问题,提供实时的代码和解决方案,帮助你解决各种难题。不仅如此,它还能提供编程资源和学习指导,帮助你快速提升编程技能。无论你是初学者还是专业人士,AI智能助手都能成为你的可靠助手,助力你在编程领域取得更大的成就。
相关标签:
来源:learnku网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
关于CSS思维导图的课件在哪? 课件
凡人来自于2024-04-16 10:10:18
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号