gin 工具是golang开发中很是有用且有效的工具,有效的提升了开发调试go程序的效率。git
咱们知道golang是编译型语言,这就表示go程序的每次改动,若是须要查看改动结果都必须从新编译一次,即go build .像咱们从事go web的开发,多是从其余解释型语言跨过来的,就特别的不适应这种调试开发,改完代码须要编译go build。而后,gin的出现就为了解决这种需求。github
看下gin 的官方解释golang
gin是一个简单的命令行实用程序,用于实时从新加载Go Web应用程序。 只需在您的应用程序目录中运行gin ,您的网络应用程序将以 gin 做为代理服务。 当gin检测到有代码更改时,它会自动从新编译代码。 您的应用将在下次收到HTTP请求时从新启动。web
固然,第一是固然是在咱们的虚拟机中安装 ginshell
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的命令网络
--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]
可使用后面的系统变量名进行这些变量设置
这几个命令掌握了基本日常开发就没啥问题了。app
新建一个web服务
看下Go的简单的web服务代码ssh
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 来编译启动这个服务
个人物理机到虚拟机映射的是curl
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