zoukankan      html  css  js  c++  java
  • golang开发:环境篇(五)实时加载工具gin的使用

    gin 工具是golang开发中非常有用且有效的工具,有效的提高了开发调试go程序的效率。

    实时编译 gin

    为什么要使用gin

    我们知道golang是编译型语言,这就表示go程序的每次改动,如果需要查看改动结果都必须重新编译一次,即go build .像我们从事go web的开发,可能是从其他解释型语言跨过来的,就特别的不适应这种调试开发,改完代码需要编译go build。然后,gin的出现就为了解决这种需求。

    看下gin 的官方解释

    gin是一个简单的命令行实用程序,用于实时重新加载Go Web应用程序。 只需在您的应用程序目录中运行gin ,您的网络应用程序将以 gin 作为代理服务。 当gin检测到有代码更改时,它会自动重新编译代码。 您的应用将在下次收到HTTP请求时重新启动。

    安装 gin

    当然,第一是当然是在我们的虚拟机中安装 gin

    vagrant ssh
    go get github.com/codegangsta/gin
    
    gin -h
    NAME:
       gin - A live reload utility for Go web applications.
    
    USAGE:
       gin [global options] command [command options] [arguments...]
    
    VERSION:
       0.0.0
    
    COMMANDS:
         run, r   Run the gin proxy in the current working directory
         env, e   Display environment variables set by the .env file
         help, h  Shows a list of commands or help for one command
    
    GLOBAL OPTIONS:
       --laddr value, -l value       listening address for the proxy server [$GIN_LADDR]
       --port value, -p value        port for the proxy server (default: 3000) [$GIN_PORT]
       --appPort value, -a value     port for the Go web server (default: 3001) [$BIN_APP_PORT]
       --bin value, -b value         name of generated binary file (default: "gin-bin") [$GIN_BIN]
    

    出现上面的提示信息表示安装成功了。

    使用gin

    了解平常开发中使用最多的几个gin的命令

    --laddr value, -l value       listening address for the proxy server [$GIN_LADDR]
    监听代理服务器的地址 系统变量[$GIN_LADDR]
    --port value, -p value        port for the proxy server (default: 3000)  [$GIN_PORT] 
    代理服务器的端口号 默认3000 系统变量[$GIN_PORT] 
    --appPort value, -a value     port for the Go web server (default: 3001)  [$BIN_APP_PORT]
    转发给Go web服务的端口 默认3001 系统变量[$BIN_APP_PORT]
    --bin value, -b value         name of generated binary file (default: "gin-bin") [$GIN_BIN]
    Go生成的二进制可执行文件的名称 默认gin-bin 系统变量[$GIN_BIN]
    --path value, -t value        Path to watch files from (default: ".")  [$GIN_PATH]
    监听文件改动的目录 默认 . 系统变量[$GIN_PATH]
    --build value, -d value       Path to build files from (defaults to same value as --path) [$GIN_BUILD]
    编译Go 程序的目录 默认 . 系统变量[$GIN_BUILD]
    --all                         reloads whenever any file changes, as opposed to reloading only on .go file change 系统变量[$GIN_ALL]
    监听所有文件的修改,都会重新编译。如果不加all就只会监听go文件的修改 系统变量[$GIN_ALL]
    

    可以使用后面的系统变量名进行这些变量设置
    这几个命令掌握了基本平常开发就没啥问题了。

    举个栗子

    新建一个web服务
    看下Go的简单的web服务代码

    package main
    
    import (
    	"fmt"
    	"net/http"
    	"log"
    )
    
    func sayhelloName(w http.ResponseWriter, r *http.Request) {
    	fmt.Fprintf(w, "Hello world!")
    }
    
    func main() {
    	http.HandleFunc("/", sayhelloName)
    	err := http.ListenAndServe(":9090", nil)
    	if err != nil {
    		log.Fatal("ListenAndServe: ", err)
    	}
    }
    

    这段代码编译完成后,启动WEB服务后会监听9090端口。
    我们使用 gin 来编译启动这个服务
    我的物理机到虚拟机映射的是

    192.168.0.10
    配置
    Vagrant.configure("2") do |config|
      config.vm.box = "base"
      config.vm.box_check_update = false
      config.vm.network "forwarded_port", guest: 80, host: 8080
      config.vm.network "private_network", ip: "192.168.0.10"
      config.vm.synced_folder "/data/www","/data/www",create:true
      config.ssh.username = "root"
      config.ssh.private_key_path = "/Users/XXX/.ssh/id_rsa"
    end
    

    我们vagrant 登录虚拟机启动服务

    sudo vagrant ssh
    cd 项目目录
    gin -p 3000 -a 9090 -b test.bin --all run
    表示监听虚拟机的3000端口,将请求转发给9000端口,生成的二进制执行文件 test.bin,所有文件的改动都会引起项目编译
    

    当然了上面的参数都是可以在后面添加的,path和build都在当前目录下,所以就使用默认的 .
    我们curl测试下

    curl http://192.168.0.10:3000
    Hello world!
    

    我们修改下输出文件

    fmt.Fprintf(w, "Hello China!")
    

    Ctrl+S保存的时候看到有编译的信息

    [gin] Building...
    [gin] Build finished
    

    我们再次测试下

    curl http://192.168.0.10:3000
    Hello China!
    

    当然了,我们也可以使用系统变量的方式,启动 gin服务
    创建test.sh

    export GIN_PORT="3000"
    export BIN_APP_PORT="9090"
    export GIN_BIN="test.bin"
    export GIN_ALL=1
    gin run
    
    chmod +x test.sh
    ./test.sh
    

    跟上面的命令行的结果一毛一样。

    完结

    有了Gin之后,go web调试基本就跟PHP NODE等的解释型语言一样了,不用每次都go build之后再发请求测试,只需要启动 shell脚本,gin自动帮你在改动代码的时候编译。

    想要了接更多,关注下 gin的官方 说明
    https://github.com/codegangsta/gin

  • 相关阅读:
    web开发:jquery高级
    web开发:jquery初级
    web开发:javascript之dom与bom
    web开发:javascript案例
    web开发:javascript动画
    web开发:javascript高级
    web开发:javascript操作
    web开发:javascript基础
    web开发:形变、表格及多行文本操作
    web开发:动画及阴影
  • 原文地址:https://www.cnblogs.com/feixiangmanon/p/11055244.html
Copyright © 2011-2022 走看看