本文摘自php中文网,作者藏色散人,侵删。
下面由golang教程栏目给大家分享5种文件变更时自动重载Go程序的方法,希望对需要的朋友有所帮助!
许多人希望在写GO时拥有实时加载代码(热编译)的效果,特别是那些习惯使用 JavaScript,Python和Ruby等解释语言的人,本文介绍了5种实时重新加载Go程序的方法。
本文假设已安装Go编译器,并且已将GOPATH/bin
路径添加到PATH环境变量中。
在开始之前,我们先创建一个简单的web服务器,可以返回响应内容”Hello,World”。
1 2 3 4 5 6 7 |
|
Method 1: 使用Air
Air 是一个命令行程序,可以为Go程序提供实时代码加载。
通过运行以下命令来安装Air。
1 |
|
下一步,在使用项目的根目录中创建Air配置文件.air.conf
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
配置是简单明了的,请根据你的项目情况去调整。
最后,不要使用常用的go run
命令来运行Go程序,而应使用air
命令来启动程序。
Method 2: docker运行Ari
这种方法需要使用docker,如果你没有安装,可以按照
我们仍将使用Air库,因此仍然需要Air配置文件。 如果你还没有,请创建一个配置文件。
Docker镜像cosmtrek/air
附带安装了Air命令,并且GOPATH环境变量设置为/go
。
我们只需要将我们的项目目录挂载到Docker容器的GOPATH中,并使用-p暴露需要使用的端口即可。 我们可以通过运行docker run命令来实现这一点:
1 |
|
就我而言,我需要运行以下命令:
1 |
|
解释:
使用-v参数将项目目录 /home/praveen/go/src/github.com/praveen001/live-reloading
挂载到容器里面的GOPATH中的目录/go/src/github.com/praveen001/live-reloading
。
1 |
|
使用-w
参数指定挂载目录成工作目录。
1 |
|
Web服务器正在监听端口5000,因此需要使用-p
标志将容器端口5000暴露到主机端口5000。
1 |
|
最后,指定docker镜像名称cosmtrek / air
。
Method 3: 使用Gin
Gin是另一个用于实时重新加载Go应用程序的命令行程序。
通过运行以下命令来安装Gin。
1 |
|
而不是使用通常的go run main.go
命令运行应用程序,而是使用gin
命令。
就我而言,--appPort
参数告诉Gin监听端口5000,--port
参数告诉Gin代理监听端口3000端口
1 |
|
现在使用地址http://localhost:3000
访问Gin程序.
如果要排除监听那个目录可以使用--excludeDir
参数,例如:
1 |
|
如果你项使用Gin实现加载没有启动端口监听的程序,你们必须使用--immediate
参数。但是Gin仍然会去5000端口。
你可以在这找到所有受支持的参数Gin的Github.
Method 4: 使用Nodemon
Nodemon是另一个用于实时重新加载Node应用程序的命令行程序。 但是可以通过使用--exec
参数设置启动命令用于启动其他应用程序。
Nodemon需要安装Nodejs和NPM。 如果没有安装,可以按照nodejs的官方文档进行安装.
运行以下命令来安装nodemon:
1 |
|
现在,我们可以通过运行以下命令来使用Nodemon运行Web服务器:
1 |
|
如果要配置Nodemon,请在项目的根目录中创建配置文件nodemon.json
。 完整可用的示例配置文件
Method 5: 使用Fresh
Fresh 是另一个GO实现的用于实时重新加载Go的程序
安装Fresh
1 |
|
而不是使用常用的go run main.go
命令来运行应用程序,而是使用fresh
命令。
1 |
|
要配置Fresh,需要在项目的根目录中创建一个配置文件runner.conf
。
这是一个示例配置文件。
1 2 3 4 5 6 7 8 9 10 11 |
|
总结
还有许多其他工具,例如:
- 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程序的方法的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
手撸Golang 仿spring ioc/aop 之5 如何扫描
更多相关阅读请进入《Go》频道 >>

Go语言101
一个与时俱进的Go编程知识库。