Gin項目腳手架與標配組件

文章目錄

    • 前言
    • 設計思想和原則
    • ? 技術棧
    • 視頻實況教程
    • sponge 內置了豐富的組件(按需使用)
    • 幾個標配
    • 常用組件
    • 主要技術點
    • 另一個
    • 參考鏈接

前言

軟件和汽車一樣,由多個重要零部件組裝而成。
本文堆積了一些常用部件,還沒來得及好好整理。先放著。
神兵利器雖多,總歸還是要組裝一個自己的才放心。

設計思想和原則

框架中用到的設計思想和原則,盡量滿足 “高內聚、低耦合”,主要遵從下面幾個原則

    1. 單一職責原則
    1. 基于接口而非實現編程
    1. 依賴注入
    1. 多用組合
    1. 迪米特法則

迪米特法則: 不該有直接依賴關系的類之間,不要有依賴;有依賴關系的類之間,盡量只依賴必要的接口

? 技術棧

  • 框架路由使用 Gin 路由
  • 中間件使用 Gin 框架的中間件
  • 數據庫組件 GORM
  • 文檔使用 Swagger 生成
  • 配置文件解析庫 Viper
  • 使用 JWT 進行身份鑒權認證
  • 校驗器使用 validator 也是 Gin 框架默認的校驗器
  • 任務調度 cron
  • 包管理工具 Go Modules
  • 測試框架 GoConvey
  • CI/CD GitHub Actions
  • 使用 GolangCI-lint 進行代碼檢測
  • 使用 make 來管理 Go 工程
  • 使用 shell(admin.sh) 腳本來管理進程
  • 使用 YAML 文件進行多環境配置

另一份整理的清單:

  1. Gin: 輕量級Web框架,自稱路由速度是golang最快的
  2. GORM: ORM工具。本項目需要配合Mysql使用
  3. Gin-Session: Gin框架提供的Session操作工具
  4. Go-Redis: Golang Redis客戶端
  5. godotenv: 開發環境下的環境變量工具,方便使用環境變量
  6. Gin-Cors: Gin框架提供的跨域中間件
  7. httpexpect: 接口測試工具
  8. 自行實現了國際化i18n的一些基本功能
  9. 本項目是使用基于cookie實現的session來保存登錄狀態的,如果需要可以自行修改為token驗證

視頻實況教程

讓我們寫個G站吧!Golang全棧編程實況

sponge 內置了豐富的組件(按需使用)

組件使用示例
Web 框架 gingin 示例
gin 中間件示例
RPC 框架 gRPCgRPC 示例
gRPC 攔截器示例
配置解析 viper示例
日志 zap示例
ORM 框架 gorm, mongo-go-drivergorm 示例
mongodb 示例
緩存 go-redis, ristrettogo-redis 示例
ristretto 示例
自動化api文檔 swagger, protoc-gen-openapiv2-
鑒權 jwtjwt 示例
gin 示例
gRPC 示例
校驗 validator, protoc-gen-validatevalidator 示例
protoc-gen-validate 示例
Websocket gorilla/websocket示例
定時任務 cron示例
消息隊列 rabbitmq, kafkarabbitmq 示例
kafka 示例
分布式事務管理器 dtmdtm 服務發現示例
使用 dtm 秒殺搶購示例
分布式鎖 dlock示例
自適應限流 ratelimitgin 示例
gRPC 示例
自適應熔斷 circuitbreakergin 示例
gRPC 示例
鏈路追蹤 opentelemetrygin 示例
gRPC 示例
跨服務鏈路追蹤示例
監控 prometheus, grafanagin 示例
gRPC 示例
web 和 gRPC 監控示例
服務注冊與發現 etcd, consul, nacos服務注冊示例
服務發現示例
自適應采集 profile示例
資源統計 gopsutil示例
配置中心 nacos示例
代碼質量檢查 golangci-lint-
持續集成部署 CI/CD kubernetes, docker, jenkins示例
生成項目業務架構圖 spograph示例
生成自定義代碼 go templatejson 示例
sql 示例
protobuf 示例
AI助手 DeepSeek, ChatGPT, Gemini示例

## 使用Singo開發的項目實例

仿B站的G站:https://github.com/Gourouting/giligili

Singo框架為移動端提供Token登錄的案例: https://github.com/bydmm/singo-token-exmaple

幾個標配

  • Gin: https://github.com/gin-gonic/gin
  • Gorm: https://github.com/go-gorm/gorm
  • Wire: https://github.com/google/wire
  • Viper: https://github.com/spf13/viper
  • Zap: https://github.com/uber-go/zap
  • Golang-jwt: https://github.com/golang-jwt/jwt
  • Go-redis: https://github.com/go-redis/redis
  • Testify: https://github.com/stretchr/testify
  • Sonyflake: https://github.com/sony/sonyflake
  • Gocron: https://github.com/go-co-op/gocron
  • Go-sqlmock: https://github.com/DATA-DOG/go-sqlmock
  • Gomock: https://github.com/golang/mock
  • Swaggo: https://github.com/swaggo/swag
  • Pitaya: https://github.com/topfreegames/pitaya
  • Casbin: https://github.com/casbin/casbin

常用組件

主要技術點

  1. 認證使用jwt,雙token模式(accessToken、refreshToken)
  2. 數據庫操作使用gorm
  3. 限流使用令牌桶
  4. 用戶id生成使用的是雪花算法
  5. 日志管理使用zap
  6. 配置文件管理使用viper
  7. 代碼熱監聽使用air
  8. 接口文檔生成使用swagger
  • 提供 gin 框架項目模版
  • 支持 HTTP 和 gRPC 雙協議服務
    • 可通過配置啟用/禁用 gRPC 服務
    • 統一的 API 定義和實現
    • 支持 gRPC 健康檢查和反射服務
  • 使用 Uber fx 框架進行依賴注入,實現更清晰的代碼結構
  • 采用標準 MVC 架構,遵循關注點分離原則
  • 集成 GORM 進行 ORM 映射和數據庫操作
    • 支持 PostgreSQL (使用 pgx 驅動)
    • 支持 MySQL
    • 支持 SQLite
    • 提供豐富的查詢選項工具函數
  • 集成 Viper 進行配置管理
  • 提供常用 gin 中間件和工具
    • 跨域中間件:處理 API 跨域請求,實現 CORS 支持
    • jwt 解析中間件:從請求中解析并驗證 JWT Token,用于 API 身份認證
  • 國際化 (i18n) 支持
    • 基于請求 Accept-Language 頭自動選擇語言
    • 錯誤消息多語言支持
    • 內置英語 (en-US) 和中文 (zh-CN) 翻譯
    • 可輕松擴展支持更多語言
  • 使用 Cobra 命令行框架,提供清晰的子命令結構
  • 支持數據庫遷移與服務器啟動分離,提高啟動速度
  • 完善的數據庫遷移系統,支持版本控制和回滾
  • 內置用戶、角色、權限和菜單管理系統
  • 支持多種用戶模式,滿足不同規模項目需求
  • 優化的錯誤處理系統,支持錯誤碼和多語言錯誤消息

另一個

  • RESTful API 設計規范
  • Gin 一款高效的golang web框架
  • MySQL 數據庫存儲
  • Jwt 用戶認證, 登入登出一鍵搞定
  • Casbin 基于角色的訪問控制模型(RBAC)
  • Gorm 數據庫ORM管理框架, 可自行擴展多種數據庫類型(主分支已支持gorm 2.0)
  • Validator 請求參數校驗, 版本V9
  • Log v1.2.2升級后日志支持兩種常見的高性能日志 logrus / zap (移除日志寫入本地文件, 強烈建議使用docker日志或其他日志收集工具)
  • Viper 配置管理工具, 支持多種配置文件類型
  • Embed go 1.16文件嵌入屬性, 輕松將靜態文件打包到編譯后的二進制應用中
  • DCron 分布式定時任務,同一task只在某臺機器上執行一次(需要配置redis)
  • GoFunk 常用工具包, 某些方法無需重復造輪子
  • FiniteStateMachine 有限狀態機, 常用于審批流程管理(沒有使用工作流, 一是go的輪子太少, 二是有限狀態機基本可以涵蓋常用的審批流程)
  • Uploader 大文件分塊上傳/多文件、文件夾上傳Vue組件vue-uploader
  • MessageCenter 消息中心(websocket長連接保證實時性, 活躍用戶上線時新增消息表, 不活躍用戶不管, 有效降低數據量)
  • testing 測試標準包, 快速進行單元測試
  • Grafana Loki 輕量日志收集工具loki, 支持分布式日志收集(需要通過docker運行gin-web-docker)
  • Minio 輕量對象存儲服務(需要通過docker運行gin-web-docker)
  • Swagger Swagger V2接口文檔
  • Captcha 密碼輸錯次數過多需輸入驗證碼
  • Sign API接口簽名(防重放攻擊、防數據篡改)
  • Opentelemetry 鏈路追蹤, 快速分析接口耗時

參考鏈接

  • https://github.com/go-eagle/eagle
  • https://github.com/gourouting/singo: Gin+Gorm開發Golang API快速開發腳手架
  • https://github.com/gostartkit/web
  • https://github.com/go-nunu/nunu
  • https://github.com/limitcool/starter: starter 是一個 Go + gin 框架的項目腳手架,提供開箱即用的工具、庫和 gin 項目配置,幫助您快速啟動 gin 驅動的 API 項目開發。
  • https://gitee.com/liuxingxiang/gin-web-scaffolding
  • https://github.com/go-dev-frame/sponge/tree/main
  • https://github.com/zzjcool/ginHelper

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/82680.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82680.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/82680.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Webtrees 手冊】第 10章 - 用戶體驗

Webtrees 手冊/用戶體驗 < Webtrees 手冊 跳轉到導航跳轉到搜索 信息 手冊部分仍在建設中 請耐心等待或隨意貢獻自己的力量:-)。 第 10 章 - 用戶體驗 <- 章節概述 目錄 1多位系譜學家的合作 1.1家庭研究模型1.2“孤膽戰士”模型1.3示范“本地家庭書”1.4模特“俱樂部”…

Linux 進程概念(下)

目錄 前言 4.進程狀態 一.普遍的操作系統層面上宏觀概念&#xff1a; 二.具體的Linux操作系統的狀態&#xff1a; 5.進程優先級&#xff08;了解&#xff09; 6.其他概念 進程切換 前言 本篇是接著上一篇的內容繼續往下了解進程相關的一些概念&#xff01; 4.進程狀態 運…

使用java實現word轉pdf,html以及rtf轉word,pdf,html

word,rtf的轉換有以下方案&#xff0c;想要免費最靠譜的是LibreOffice方案, LibreOffice 是一款 免費、開源、跨平臺 的辦公軟件套件&#xff0c;旨在為用戶提供高效、全面的辦公工具&#xff0c;適用于個人、企業和教育機構。它支持多種操作系統&#xff08;Windows、macOS、…

IP證書的作用與申請全解析:從安全驗證到部署實踐

在網絡安全領域&#xff0c;IP證書&#xff08;IP SSL證書&#xff09;作為傳統域名SSL證書的補充方案&#xff0c;專為公網IP地址提供HTTPS加密與身份驗證服務。本文將從技術原理、應用場景、申請流程及部署要點四個維度&#xff0c;系統解析IP證書的核心價值與操作指南。 一…

GitLab 18.0 正式發布,15.0 將不再受技術支持,須升級【三】

GitLab 是一個全球知名的一體化 DevOps 平臺&#xff0c;很多人都通過私有化部署 GitLab 來進行源代碼托管。極狐GitLab 是 GitLab 在中國的發行版&#xff0c;專門為中國程序員服務。可以一鍵式部署極狐GitLab。 學習極狐GitLab 的相關資料&#xff1a; 極狐GitLab 官網極狐…

超簡單Translation翻譯模型部署

Helsinki-NLP/opus-mt-{en}-{zh}系列翻譯模型可以實現200多種語言翻譯&#xff0c;Helsinki-NLP/opus-mt-en-zh是其中英互譯模型。由于項目需要&#xff0c;在本地進行搭建&#xff0c;并記錄下搭建過程&#xff0c;方便后人。 1. 基本硬件環境 CPU&#xff1a;N年前的 Intel…

Go語言JSON 序列化與反序列化 -《Go語言實戰指南》

JSON&#xff08;JavaScript Object Notation&#xff09;是一種常見的數據交換格式。Go 標準庫提供了 encoding/json 包&#xff0c;用于方便地將結構體與 JSON 之間互轉。 一、序列化&#xff08;Marshal&#xff09; 將 Go 中的數據結構&#xff08;如結構體、map、slice 等…

免費PDF工具-PDF24V9.16.0【win7專用版】

【百度】https://pan.baidu.com/s/1H7kvHudG5JTfxHg-eu2grA?pwd8euh 提取碼: 8euh 【夸克】https://pan.quark.cn/s/92080b2e1f4c 【123】https://www.123912.com/s/0yvtTd-XAHjv https://creator.pdf24.org/listVersions.php

網絡 :序列和反序列化

網絡 &#xff1a;序列和反序列化 &#xff08;一&#xff09;序列和反序列 概念&#xff08;二&#xff09;實例1. 封裝socket 接口2. 制定協議&#xff08;用于實現序列和反序列化&#xff09;3. 計算(實現計算器功能)4. 服務器(將上面所有的類功能調用起來)5. 服務端6.客戶端…

LiveQing 視頻點播流媒體 RTMP 推流服務功能:搭建 RTMP 視頻流媒體服務詳細指南

LiveQing視頻點播流媒體RTMP推流服務功能&#xff1a;搭建RTMP視頻流媒體服務詳細指南 一、流媒體服務搭建二、推流工具準備三、創建鑒權直播間四、獲取推流地址五、配置OBS推流六、推流及播放七、獲取播放地址7.1 頁面查看視頻源地址7.2 接口查詢 八、相關問題解決8.1 大疆無人…

UE5 Niagara 如何讓四元數進行旋轉

Axis Angle中&#xff0c;X,Y,Z分別為旋轉的軸向&#xff0c;W為旋轉的角度&#xff0c;在這里旋轉角度不需要除以2&#xff0c;因為里面已經除了&#xff0c;再將計算好的四元數與要進行旋轉的四元數進行相乘&#xff0c;結果就是按照原來的角度繞著某一軸向旋轉了某一角度

【微服務】SpringBoot 對接飛書審批流程使用詳解

目錄 一、前言 二、前置準備 2.1 開通企業飛書賬戶 2.2 確保賬戶具備多維表操作權限 2.3 獲取飛書開放平臺文檔 2.4 創建應用 2.5 發布應用 2.6 應用添加操作權限 2.7 獲取SDK 三、審批流程對接過程 3.1 配置流程審批定義(流程審批模型) 3.2 自定義應用添加審批AP…

主鍵與唯一鍵詳解:概念、區別與面試要點

主鍵與唯一鍵詳解:概念、區別與面試要點 一、核心概念解析 1.1 主鍵(Primary Key) 主鍵是數據庫表中用于唯一標識每一行記錄的列或列組合,具有以下核心特性: 唯一性:主鍵值在整個表中必須唯一,不允許重復非空性:主鍵列不允許包含NULL值不可變性:主鍵值一旦確立,原則…

前端面試準備-1

1.NodeJS的優缺點 優點&#xff1a;   高并發&#xff08;最重要的優點&#xff09;   適合I/O密集型應用 缺點&#xff1a;   不適合CPU密集型應用&#xff1b;CPU密集型應用給Node帶來的挑戰主要是&#xff1a;由于JavaScript單線程的原因&#xff0c;如果有長時間運行的…

GO并發過高導致程序崩潰如何解決

#作者&#xff1a;曹付江 文章目錄 1.并發過高導致程序崩潰2. 如何解決2.1 利用 channel 的緩存區2.2 利用第三方庫 3 調整系統資源的上限3.1 ulimit3.2 虛擬內存(virtual memory) 1.并發過高導致程序崩潰 看一個非常簡單的例子&#xff1a; func main() {var wg sync.WaitG…

Linux -- gdb/cgdb的認識和使用

預備知識 程序的發布?式有兩種&#xff0c; debug 模式和 release 模式&#xff0c; Linux gcc/g 出來的?進制程 序&#xff0c;默認是 release 模式。 要使?gdb調試&#xff0c;必須在源代碼?成?進制程序的時候, 加上 -g 選項&#xff0c;如果沒有添加&#x…

window 顯示驅動開發-Direct3D 呈現性能改進(四)

調用資源創建、映射和取消映射函數的行為更改 對于 WDDM 1.3 及更高版本驅動程序實現的這些函數&#xff0c;Direct3D 運行時為映射默認方案提供一組受限的輸入值。 這些受限值僅適用于支持功能級別 11.1 及更高版本的驅動程序。 CreateResource (D3D11) 函數— 這些輸入 D3…

3.python操作mysql數據庫

前言&#xff1a;在現代應用程序中&#xff0c;數據庫扮演者至關重要的角色。mysql是一個流行的關系型數據庫管理系統&#xff0c;廣泛應用于各種規模的應用中。在pytho中&#xff0c;我們可以通過連接庫與mysql數據庫進行交互&#xff0c;實現數據的增刪改查操作。與此同時&am…

day023-網絡基礎與OSI七層模型

文章目錄 1. 網絡基礎知識點1.1 網絡中的單位1.2 查看實時網速&#xff1a;iftop1.3 交換機、路由器 2. 路由表2.1 查看路由表的命令2.2 路由追蹤命令 3. 通用網站網絡架構4. 局域網上網原理-NAT5. 虛擬機上網原理6. 虛擬機的網絡模式6.1 NAT模式6.2 橋接模式6.3 僅主機模式 7.…

DeepSeek智能對話助手項目

目錄&#xff1a; 1、效果圖2、實現代碼3、溫度和TopK的作用對比 1、效果圖 2、實現代碼 # import gradio as gr# def reverse_text(text): # return text[::-1]# demogr.Interface(fnreverse_text,inputs"text",outputs"text")# demo.launch(share&q…