Go - 一個對新手很友好的項目(帶界面)

這個開源項目就是:go-gin-api ,目前 800+ Star。git

go-gin-api 是基於 Gin 進行模塊化設計的 API 框架,封裝了經常使用的功能,使用簡單,致力於進行快速的業務研發,同時增長了更多限制,約束項目組開發成員,規避混亂無序及自由隨意的編碼。github

下載後可直接運行

$ git clone https://github.com/xinliangnote/go-gin-api
$ cd go-gin-api
$ go run main.go -env fat  // -env fat 設置爲測試環境

首先進入到服務初始化界面。web

image.png

接下來填寫 MySQLRedis 配置信息,填寫完成後,點擊初始化按鈕。redis

image.png

如上圖所示,表示服務初始化成功,須要再從新啓動服務,服務啓動後就會看到登陸界面。算法

image.png

使用默認用戶信息: adminadmin 登陸便可,登陸成功後就會看到儀表盤界面。數據庫

image.png

已集成哪些功能?

Panic 時郵件告警通知

在後臺可配置郵件發件人信息,以下圖所示:json

image.png

郵件模板以下:api

image.png

接口鑑權

在後臺可設置調用方 KEY、調用方 SECRET、調用方對接人、備註等信息。跨域

image.png

image.png

將建立的調用方的 KEY、SECRET 發給調用方便可,能夠對調用方進行 啓用/禁用/刪除 等操做,還能夠對其受權可訪問的接口。cors

image.png

接口鑑權是基於 HTTP Header 中的兩個參數 AuthorizationAuthorization-Date 存儲簽名信息,代碼中提供了 3 種語言的加密算法:GoPHPJS

image.png

代碼生成工具

image.png

gormgen,基於數據表生成三個文件,以 admin 表爲例會生成:gen_table.md 表註釋的 MD 文檔、gen_model.go 表字段的結構體、gen_admin.go 表 CURD 操做代碼。

意義:在進行業務需求開發時,建立完數據表後,執行代碼生成工具,經常使用的 CURD 操做所有生成完畢,使用的時候只須要 . 後面的方法便可,這樣大大提升了業務開發效率。

image.png

handlergen,基於定義的 Handler 文件中 type interface{} 中接口方法,進行生成文件。

例如,定義的方法爲:

// 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) {
        
    }
}

意義:本次需求的研發負責人經過定義 type interface{} 的方式,定義出須要開發的方法,執行代碼生成工具,每一個方法的空實現都會生成在一個單獨的文件中,開發人員只需去實現各自方法便可,便於進行分工和代碼管理。

接口日誌

經過 鏈路 ID 能夠將 請求信息響應信息調用第三方 HTTP 接口的信息調用第三方 gRPC 接口的信息調試信息執行的 SQL 信息執行的 Redis 信息 串起來,記錄到日誌中。

image.png

點擊某一行可查看日誌詳情。

接口文檔

經過 handlergen 生成的代碼,自帶接口文檔。

image.png

接口指標

項目中使用 prometheus 進行指標收集,項目中默認開啓 metrics 記錄,能夠經過 http://127.0.0.1:9999/metrics 便可查看。

GraphQL

項目中使用 gqlgen 實現了 GraphQL 查詢,會發現與 gqlgen init 初始化的 demo 不一樣,是由於代碼已經集成到 go-gin-api 中,好比集成了項目 core 包中的 鏈路、日誌 等。

目前僅實現了 Demo, resolver 使用的是模擬數據,不過使用可複用的 service 也已經實現了,在代碼已註釋,感興趣的能夠深刻研究。

Prometheus

啓動 Prometheus 的配置文件,可參考:

  • ./deploy/prometheus/prometheus.yml

相似效果:

image.png

image.png

Loki

Loki 是一個水平可擴展,高可用性,多租戶的日誌聚合系統,有興趣能夠研究一下。

啓用 Loki 的配置文件,可參考:

  • ./deploy/loki/loki.yaml
  • ./deploy/loki/promtail.yaml

已使用哪些組件?

  • 支持 rate 接口限流
  • 支持 panic 異常時郵件通知
  • 支持 cors 接口跨域
  • 支持 Prometheus 指標記錄
  • 支持 Swagger 接口文檔生成
  • 支持 GraphQL 查詢語言
  • 支持 trace 項目內部鏈路追蹤
  • 支持 pprof 性能剖析
  • 支持 jwt 接口鑑權
  • 支持 errno 統必定義錯誤碼
  • 支持 zap 日誌收集
  • 支持 viper 配置文件解析
  • 支持 gorm 數據庫組件
  • 支持 go-redis 組件
  • 支持 RESTful API 返回值規範
  • 支持 gormgen、handlergen 代碼生成工具
  • 支持 web 界面,使用的 Light Year Admin 模板

項目地址

源碼地址

https://github.com/xinliangno...

在線文檔

https://www.yuque.com/xinlian...

若是您有好的想法和建議,歡迎加好友交流。

相關文章
相關標籤/搜索