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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM