gin 工具是golang開發中非常有用且有效的工具,有效的提高了開發除錯go程式的效率。
為什麼要使用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