Go - 一個對新手很友好的項目(帶界面)
這個開源項目就是:go-gin-api ,目前 800+ Star。
go-gin-api 是基于 Gin 進(jìn)行模塊化設(shè)計的 API 框架,封裝了常用的功能,使用簡單,致力于進(jìn)行快速的業(yè)務(wù)研發(fā),同時增加了更多限制,約束項目組開發(fā)成員,規(guī)避混亂無序及自由隨意的編碼。
下載后可直接運行
$ git clone https://github.com/xinliangnote/go-gin-api
$ cd go-gin-api
$ go run main.go -env fat // -env fat 設(shè)置為測試環(huán)境
首先進(jìn)入到服務(wù)初始化界面。

接下來填寫 MySQL、Redis 配置信息,填寫完成后,點擊初始化按鈕。

如上圖所示,表示服務(wù)初始化成功,需要再重新啟動服務(wù),服務(wù)啟動后就會看到登錄界面。

使用默認(rèn)用戶信息:admin,admin 登錄即可,登錄成功后就會看到儀表盤界面。

已集成哪些功能?
Panic 時郵件告警通知
在后臺可配置郵件發(fā)件人信息,如下圖所示:

郵件模板如下:

接口鑒權(quán)
在后臺可設(shè)置調(diào)用方 KEY、調(diào)用方 SECRET、調(diào)用方對接人、備注等信息。


將創(chuàng)建的調(diào)用方的 KEY、SECRET 發(fā)給調(diào)用方即可,可以對調(diào)用方進(jìn)行 啟用/禁用/刪除 等操作,還可以對其授權(quán)可訪問的接口。

接口鑒權(quán)是基于 HTTP Header 中的兩個參數(shù) Authorization、Authorization-Date 存儲簽名信息,代碼中提供了 3 種語言的加密算法:Go、PHP、JS。

代碼生成工具

gormgen,基于數(shù)據(jù)表生成三個文件,以 admin 表為例會生成:gen_table.md 表注釋的 MD 文檔、gen_model.go 表字段的結(jié)構(gòu)體、gen_admin.go 表 CURD 操作代碼。
意義:在進(jìn)行業(yè)務(wù)需求開發(fā)時,創(chuàng)建完數(shù)據(jù)表后,執(zhí)行代碼生成工具,常用的 CURD 操作全部生成完畢,使用的時候只需要 . 后面的方法即可,這樣大大提高了業(yè)務(wù)開發(fā)效率。

handlergen,基于定義的 Handler 文件中 type interface{} 中接口方法,進(jìn)行生成文件。
例如,定義的方法為:
// Login 管理員登錄
// @Tags API.admin
// @Router /api/admin/login [post]
Login() core.HandlerFunc
生成后的方法為:
type loginRequest struct {
}
type loginResponse struct {
}
// Login 管理員登錄
// @Summary 管理員登錄
// @Description 管理員登錄
// @Tags API.admin
// @Accept multipart/form-data
// @Produce json
// @Success 200 {object} loginResponse
// @Failure 400 {object} code.Failure
// @Router /api/admin/login [post]
func (h *handler) Login() core.HandlerFunc {
return func(c core.Context) {
}
}
意義:本次需求的研發(fā)負(fù)責(zé)人通過定義 type interface{} 的方式,定義出需要開發(fā)的方法,執(zhí)行代碼生成工具,每個方法的空實現(xiàn)都會生成在一個單獨的文件中,開發(fā)人員只需去實現(xiàn)各自方法即可,便于進(jìn)行分工和代碼管理。
接口日志
通過 鏈路 ID 可以將 請求信息、響應(yīng)信息、調(diào)用第三方 HTTP 接口的信息、調(diào)用第三方 gRPC 接口的信息、調(diào)試信息、執(zhí)行的 SQL 信息、執(zhí)行的 Redis 信息 串起來,記錄到日志中。

點擊某一行可查看日志詳情。
接口文檔
通過 handlergen 生成的代碼,自帶接口文檔。

接口指標(biāo)
項目中使用 prometheus 進(jìn)行指標(biāo)收集,項目中默認(rèn)開啟 metrics 記錄,可以通過 http://127.0.0.1:9999/metrics 即可查看。
GraphQL
項目中使用 gqlgen 實現(xiàn)了 GraphQL 查詢,會發(fā)現(xiàn)與 gqlgen init 初始化的 demo 不同,是因為代碼已經(jīng)集成到 go-gin-api 中,比如集成了項目 core 包中的 鏈路、日志 等。
目前僅實現(xiàn)了 Demo, resolver 使用的是模擬數(shù)據(jù),不過使用可復(fù)用的 service 也已經(jīng)實現(xiàn)了,在代碼已注釋,感興趣的可以深入研究。
Prometheus
啟動 Prometheus 的配置文件,可參考:
./deploy/prometheus/prometheus.yml
類似效果:


Loki
Loki 是一個水平可擴(kuò)展,高可用性,多租戶的日志聚合系統(tǒng),有興趣可以研究一下。
啟用 Loki 的配置文件,可參考:
./deploy/loki/loki.yaml ./deploy/loki/promtail.yaml
已使用哪些組件?
支持 rate 接口限流 支持 panic 異常時郵件通知 支持 cors 接口跨域 支持 Prometheus 指標(biāo)記錄 支持 Swagger 接口文檔生成 支持 GraphQL 查詢語言 支持 trace 項目內(nèi)部鏈路追蹤 支持 pprof 性能剖析 支持 jwt 接口鑒權(quán) 支持 errno 統(tǒng)一定義錯誤碼 支持 zap 日志收集 支持 viper 配置文件解析 支持 gorm 數(shù)據(jù)庫組件 支持 go-redis 組件 支持 RESTful API 返回值規(guī)范 支持 gormgen、handlergen 代碼生成工具 支持 web 界面,使用的 Light Year Admin 模板
項目地址
源碼地址
https://github.com/xinliangnote/go-gin-api
在線文檔
https://www.yuque.com/xinliangnote/go-gin-api/ngc3x5
推薦閱讀
