golang web开发过程中想要拥有比较好的体验,需要解决两个问题,一个是自动reload(检测文件改动自动reload),二自动同步代码。
自动reload
这个是硬需求,因为开发过程中肯定需要不断的调试以及改动代码,需要及时能够看到代码的运行效果。如果没有自动reload,则需要我们不断的ctrl+c && go run main.go 操作。操作频繁而且浪费时间,最主要的是影响心情。
目前发现了一个golang的工具,可以实现自动reload功能——gin。这个gin不是我们熟知的web框架的gin,是一个自动reload的工具。使用方法也很简单,就是原本使用 go run main.go
命令改成gin run main.go
。
gin -h
--laddr value, -l value listening address for the proxy server
--port value, -p value port for the proxy server (default: 3000)
--appPort value, -a value port for the Go web server (default: 3001)
--bin value, -b value name of generated binary file (default: "gin-bin")
--path value, -t value Path to watch files from (default: ".")
--build value, -d value Path to build files from (defaults to same value as --path)
--excludeDir value, -x value Relative directories to exclude
--immediate, -i run the server immediately after it's built
--all reloads whenever any file changes, as opposed to reloading only on .go file change
--godep, -g use godep when building
--buildArgs value Additional go build arguments
--certFile value TLS Certificate
--keyFile value TLS Certificate Key
--logPrefix value Setup custom log prefix
--notifications enable desktop notifications
--help, -h show help
--version, -v print the version
举个栗子
比如golang web的端口号为8089,使用自动reload的命令为:
gin --port 8000 --appPort 8089 run main.go
运行gin命令主要有两个参数需要注意,appPort是web服务的端口号,port参数gin工具代理后的参数。也就是gin运行的时候需要代理一个端口号。
代码自动同步
个人开发不会遇到这个问题,但是公司开发代码可能在本地无法运行调试,代码需要运行在远程开发机上。比如mysql ip的限制,代码调试需要在公司的开发机上面调试。但是代码编辑一般都是在本地开发,而代码运行需要在远程的开发机上面运行。这个地方就涉及到代码如何自动同步的问题,一般有几种解决方案:
- FTP/SFTP + vscode + sync插件
- FTP/SFTP + jetbrains GoLand + sync插件
- fis3 + receiver (推荐)
比较推荐fis3这种方案,原因有两点:
- 服务部署简单
- 同步文件路径可以随意更改
- 端口号可以随意设置(有些开发机限制了ftp端口号)
当然fis3的功能不仅限于此,详细功能可以参考官网文档。
fis3 的方案,本地和远程都需要部署nodejs环境,因为这个工具是js编写的。fis3是本地的同步工具,负责向远程同步文件,receiver则是远程的文件接收器。
举个栗子
部署
# 本地
$ npm i -g fis3
# 远程机器
$ git clone https://github.com/fex-team/receiver.git
$ cd receiver
$ npm install
$ node server.js # default port 8999, use `node server.js <port>` change port
同步代码
在项目根目录编写fis-conf.js文件,这个文件是fis3的配置文件,设置如何同步代码。详细设置请参考官方文档
/**
* @file fis同步代码配置文件
*/
const rootPath = '/home/work/go/xxx';
const receiver = 'http://xxxx.xxx.xxx:8999/receiver';
const ignore = ['fis-conf.js', 'dev.sh', 'gin-bin'];
fis.set('project.ignore', fis.get('project.ignore').concat(ignore));
fis.match('*', {
deploy: fis.plugin('http-push', {
receiver,
to: rootPath
})
});
// 日志不同步
fis.match('/log/**', {
release: false
});
fis.match('/tmp/**', {
release: false
});
执行fis3命令同步代码
fis3 release -w
接下来就你就可以专心编写代码了,代码自动同步、服务自动reload,可以实现即时查看代码效果。golang web开发如飘柔一样丝滑。
有疑问加站长微信联系(非本文作者)