ginapi服务器性能,gin框架构建Api之:环境配置和路由
Gin是一個golang的微框架,封裝比較優雅,API友好,源碼注釋比較明確,已經發布了1.0版本。具有快速靈活,容錯方便等特點。其實對于golang而言,web框架的依賴要遠比Python,Java之類的要小。自身的net/http足夠簡單,性能也非常不錯。框架更像是一些常用函數或者工具的集合。借助框架開發,不僅可以省去很多常用的封裝帶來的時間,也有助于團隊的編碼風格和形成規范。
什么是 API
API(Application Programming Interface,應用程序編程接口)是一些預先定義的函數或者接口,目的是提供應用程序與開發人員基于某軟件或硬件得以訪問一組例程的能力,而又無須訪問源碼,或理解內部工作機制的細節。
要實現一個 API 服務器,首先要考慮兩個方面:API 風格和媒體類型。Go 語言中常用的 API 風格是 RPC 和 REST,常用的媒體類型是 JSON、XML 和 Protobuf。在 Go API 開發中常用的組合是 gRPC + Protobuf 和 REST + JSON,本次我們使用gin作為api服務的構建框架。
加載路由,并啟動 HTTP 服務
main.go 中的 main() 函數是 Go 程序的入口函數,在 main() 函數中主要做一些配置文件解析、程序初始化和路由加載之類的事情,最終調用 http.ListenAndServe() 在指定端口啟動一個 HTTP 服務器。本小節是一個簡單的 HTTP 服務器,僅初始化一個 Gin 實例,加載路由并啟動 HTTP 服務器。
開發環境搭建
Go 有多種安裝方式,比如 Go 源碼安裝、Go 標準包安裝、第三方工具(yum、apt-get 等)安裝。本小冊 API 運行在 Linux 服務器上,選擇通過標準包來安裝 Go 編譯環境。Go 提供了每個平臺打好包的一鍵安裝,這些包默認會安裝到如下目錄:/usr/local/go。當然你可以改變它們的安裝位置,但是改變之后你必須在你的環境變量中設置如下兩個環境變量:
GOROOT:GOROOT 就是 Go 的安裝路徑
GOPATH:GOPATH 是作為編譯后二進制的存放目的地和 import 包時的搜索路徑
假定你想要安裝 Go 的目錄為 $GO_INSTALL_DIR,后面替換為相應的目錄路徑,安裝步驟如下。
下載安裝包
安裝包下載地址為 golang.org,如果打不開可以使用這個地址:golang.google.cn。
Linux 版本選擇 goxxxxx.linux-amd64.tar.gz 格式的安裝包,這里在 Linux 服務器上直接用 wget 命令下載:
$ wget https://dl.google.com/go/go1.10.2.linux-amd64.tar.gz
設置安裝目錄
$ export GO_INSTALL_DIR=$HOME
這里我們安裝到用戶主目錄下。
解壓 Go 安裝包
$ tar -xvzf go1.10.2.linux-amd64.tar.gz -C $GO_INSTALL_DI
設置環境變量
$ export GO_INSTALL_DIR=$HOME
$ export GOROOT=$GO_INSTALL_DIR/go
$ export GOPATH=$HOME/ginserver
$ export PATH=$GOPATH/bin:$PATH:$GO_INSTALL_DIR/go/bin
如果不想每次登錄系統都設置一次環境變量,可以將上面 4 行追加到 $HOME/.bashrc 文件中。
執行 go version 檢查 Go 是否成功安裝
$ go version
go version go1.10.2 linux/amd64
看到 go version 命令輸出 go 版本號 go1.10.2 linux/amd64,說明 go 命令安裝成功。
創建 $GOPATH/src 目錄, $GOPATH/src是 Go 源碼存放的目錄,所以在正式開始編碼前要先確保 $GOPATH/src 目錄存在,執行命令:
$ mkdir -p $GOPATH/src
加載路由,并啟動 HTTP 服務
main.go 中的 main() 函數是 Go 程序的入口函數,在 main() 函數中主要做一些配置文件解析、程序初始化和路由加載之類的事情,最終調用 http.ListenAndServe() 在指定端口啟動一個 HTTP 服務器。本小節是一個簡單的 HTTP 服務器,僅初始化一個 Gin 實例,加載路由并啟動 HTTP 服務器。
編寫入口函數,編寫 main() 函數,main.go 代碼:
package main
import (
"runtime"
"com.api.com/router"
)
func main() {
runtime.GOMAXPROCS(runtime.NumCPU())
routers := router.InitRouter()
routers.Run(":8080")
}
加載路由 src/com.api.com/router/router.go
.........
// InitRouter 定義路由及函數
func InitRouter() *gin.Engine {
router := gin.Default()
load(
// Cores.
router,
// Middlwares.
middleware.Logging(),
)
//router.GET("/video/getAddressByFileId", http.GetAddressByFileID)
return router
}
自定義recovery捕獲錯誤
gin.Recovery():在處理某些請求時可能因為程序 bug 或者其他異常情況導致程序 panic,這時候為了不影響下一次請求的調用,需要通過 gin.Recovery()來恢復 API 服務器
`````
type recovery struct {
//out optional output to log any panics
}
func (r recovery) Serve(ctx *gin.Context) {
defer func() {
if err := recover(); err != nil {
fmt.Println("recover from panic", err.(error),string(debug.Stack()))
errJson, _:= json.Marshal(ctx.Request.URL.Query())
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的ginapi服务器性能,gin框架构建Api之:环境配置和路由的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 主键索引如何创建_SQL创建
- 下一篇: java表格的创建_Java创建表格实例