美文网首页
golang web开发前的准备

golang web开发前的准备

作者: NY_YN | 来源:发表于2018-10-09 11:22 被阅读0次

    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开发如飘柔一样丝滑。

    相关文章

      网友评论

          本文标题:golang web开发前的准备

          本文链接:https://www.haomeiwen.com/subject/jileaftx.html