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

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

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

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

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

郵件模板如下:

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


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

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

代碼生成工具

gormgen,基于數(shù)據(jù)表生成三個(gè)文件,以 admin 表為例會(huì)生成:gen_table.md 表注釋的 MD 文檔、gen_model.go 表字段的結(jié)構(gòu)體、gen_admin.go 表 CURD 操作代碼。
意義:在進(jìn)行業(yè)務(wù)需求開發(fā)時(shí),創(chuàng)建完數(shù)據(jù)表后,執(zhí)行代碼生成工具,常用的 CURD 操作全部生成完畢,使用的時(shí)候只需要 . 后面的方法即可,這樣大大提高了業(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í)行代碼生成工具,每個(gè)方法的空實(shí)現(xiàn)都會(huì)生成在一個(gè)單獨(dú)的文件中,開發(fā)人員只需去實(shí)現(xiàn)各自方法即可,便于進(jìn)行分工和代碼管理。
接口日志
通過 鏈路 ID 可以將 請(qǐng)求信息、響應(yīng)信息、調(diào)用第三方 HTTP 接口的信息、調(diào)用第三方 gRPC 接口的信息、調(diào)試信息、執(zhí)行的 SQL 信息、執(zhí)行的 Redis 信息 串起來,記錄到日志中。

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

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


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