目錄看下 gin 框架的官方介紹:
gin 是乙個用 go (golang) 編寫的 web 框架。 它是乙個類似於 martini 但擁有更好效能的 api 框架, 由於 httprouter,速度提高了近 40 倍。 如果你是效能和高效的追求者, 你會愛上 gin。是的,就是用 gin 來寫 api 介面。
這篇文章分享 gin 的安裝和gin 的路由配置。
路由配置包含的功能點如下:
必須要先安裝 go,go 的安裝可以參考:go - 環境安裝。
我在安裝時,用的是 dep 安裝,給大家分享下。
dep 是啥 ?
它是 golang 官方依賴管理工具,可以認為它與 php 中的 composer 類似。
在這就不多做介紹了,可以自己去了解,安裝也比較簡單。
我本機是 mac,安裝只需乙個命令:
brew install dep
咱們接下來建立乙個新專案:gindemo。
在 gindemo 目錄下執行:
dep init
執行完畢,會生成如下三個檔案:
├─ gindemo
│ ├─ vendor
│ ├─ gopkg.toml
│ ├─ gopkg.lock
需要的依賴配置寫在gopkg.toml
檔案。
gopkg.lock
暫時可以不用管。
在gopkg.toml
檔案中增加依賴:
新增乙個 main.go 檔案:
// 官方 demo
}
gindemo 目錄下執行:
dep ensure
執行完畢,vendor
目錄會存在安裝包,這時整體目錄結構如下:
├─ gindemo
│ ├─ vendor
│ ├── github.com
│ ├── ...
│ ├── golang.org
│ ├── ...
│ ├── gopkg.in
│ ├── ...
│ ├─ gopkg.toml
│ ├─ gopkg.lock
│ ├─ main.go
gindemo 目錄下執行:
go run main.go
瀏覽器訪問:http://localhost:8080/ping
大功告成!
假設需求是這樣的,介面支援多種請求方式,v1 不需簽名驗證,v2 需要簽名驗證,路由檔案應該這樣寫:
// v2 版本
groupv2 := r.group("/v2", common.verifysign) }
func signdemo(c *gin.context) {}
params := url.values,
"price" : string,
"ts" : string,
} res["sn"] = common.createsign(params)
res["ts"] = ts
common.retjson("200", "", res, c)
}.any
表示支援多種請求方式。
controller/v1
表示 v1 版本的檔案。
controller/v2
表示 v2 版本的檔案。
signdemo
表示生成簽名的demo。
接下來,給出一些**片段:
驗證簽名方法:
// 驗證簽名
func verifysign(c *gin.context) else if method == "post" else
exp, _ := strconv.parseint(config.api_expiry, 10, 64)
// 驗證過期時間
if ts > gettimeunix() || gettimeunix() - ts >= exp
// 驗證簽名
if sn == "" || sn != createsign(req)
}
生成簽名的方法:
// 生成簽名
func createsign(params url.values) string
} sort.strings(key)
for i := 0; i < len(key); i++ else
} // 自定義簽名演算法
return sign
}
獲取引數的方法:
// 獲取 get 引數
name := c.query("name")
price := c.defaultquery("price", "100")
// 獲取 post 引數
name := c.postform("name")
price := c.defaultpostform("price", "100")
// 獲取 get 所有引數
reqget = c.request.url.query()
//獲取 post 所有引數
reqpost = c.request.postform
v1 業務**:
}v2 業務**:
}接下來,直接看效果吧。
訪問 v1 介面:
訪問後,直接返回資料,不走簽名驗證。
訪問 v2 介面:
進入了這段驗證:
// 驗證過期時間
if ts > gettimeunix() || gettimeunix() - ts >= exp
修改為合法的時間戳後:
進入了這段驗證:
// 驗證簽名
if sn == "" || sn != createsign(req)
修改為合法的簽名後:
至此,簡單的路由配置已經實現了。
對了,還有乙個點沒說,就是如何讀取配置檔案中的配置,我是這樣做的:
package config
const (
port = ":8080"
api_expiry = "120"
)
引入 config 包,直接config.xx
即可。
gin 框架
基礎篇
Gin框架二 Gin基本路由 1
目錄 基本路由 路由引數 路徑全部引數 路徑單個引數 獲取url中指定的引數 get post請求 獲取url預設值的引數 get post請求 路由是自定義url位址執行指定的函式,良好的路由定義可以對seo起到很好的效果。gin框架封裝了http庫,提供了get post put delete ...
gin系列 路由及路由組
路由及路由組 建立某個資訊 r.post index func c gin.context 更新某個資訊 r.put index func c gin.context 刪除某個資訊 r.delete index func c gin.context 處理所有的請求方法 沒有路由的頁面 為沒有配置處理...
Gin框架系列01 極速上手
gin是go語言編寫的web框架,具備中介軟體 崩潰處理 json驗證 內建渲染等多種功能。沒有安裝配置go語言環境的同學請先自行安裝,這裡不再贅述。首先,我們來建立工作目錄gin。mkdir gin cd gin然後用go mod命令初始化專案,go mod是go語言的包管理工具,官方推薦使用,有...