doc-generate/cursor.md

5.1 KiB
Raw Permalink Blame History

🏛️ Cursor Rules: Go Kernel Mode 1.25.1

最高指導原則: 以 Linus Torvalds 的實用主義為核心,融合 Go 語言三巨頭 (Pike, Thompson, Griesemer) 的簡潔與併發哲學。

核心目標: 構建極致高效 (Performance-First)、極度簡潔 (Simplicity)、且完全受控 (Control) 的 Go 後端服務。


1. 最小化原則 (Minimization Principle)

核心:保持規模的簡潔、專注、易於理解。

規則 ID 規則內容 (Go 實踐) 哲學依據
M1 Stdlib-First 強制優先 使用 Go 標準庫 (net/http, context, sync, io, database/sql)。任何外部依賴的引入必須有不可替代的理由。 Pike/Thompson 簡潔與正交性。
M2 No-Fat-Frameworks 禁止 使用大型、功能過載的 Web 框架。僅允許使用 Go 標準庫或極輕量的路由/工具庫 (如 go-chi/chi),以維持對 性能瓶頸的完全控制 Linus Torvalds 實用與控制。
M3 Small Interfaces 介面 (Interfaces) 必須 小且專一 (er 慣例,如 io.Reader)。介面應定義在使用者 (Consumer) 端,以促進模組間的低耦合。 Robert Griesemer 語言設計的嚴謹。
M4 Explicit Errors 錯誤處理必須使用 Go 慣用的多回傳值 (value, error) 模式。嚴禁 使用 panicrecover 來控制正常的業務流程錯誤。 Go 慣例: 錯誤是流程的一部分。

2. 結構化原則 (Structural Principle)

核心:使用分層架構管理職責邊界,促進可測試性和可維護性。

規則 ID 規則內容 (Go 實踐) 哲學依據
S1 Internal-First Layout 核心業務邏輯必須放置在 internal/ 目錄中,不允許被外部專案直接導入。執行入口點必須在 cmd/{servicename} Griesemer/Go 慣例: 嚴謹的專案封裝。
S2 Clean Architecture Layers 服務應至少分為 transport (I/O, 如 net/http Handler)、service (核心業務邏輯) 和 repository (數據存取)。層次間透過 介面 隔離。 Pike/Thompson 關注點分離 (Separation of Concerns)。
S3 Concurrency Management 併發操作 (如背景任務、Worker Pool) 必須明確使用 Goroutine 和 Channel 封裝。Goroutine 的生命週期 必須使用 context.Context 進行取消與超時控制。 Rob Pike Go 併發模型的正確實踐。
S4 Config Isolation 設定檔 (.env, 環境變數) 只能在 cmd 或專門的 config 套件中讀取。核心業務邏輯 (Service Layer) 絕不允許直接存取環境變數。 Linus Torvalds 清晰的邊界控制。

3. 精準引用原則 (Precise Reference Principle)

核心:所有依賴必須顯式、高效、可追溯。

規則 ID 規則內容 (Go 實踐) 哲學依據
P1 Raw SQL Control 數據層存取必須使用 原生 SQL 語句,並搭配 sqlxsqlc 輔助。嚴禁 使用大型、會自動生成複雜查詢的 ORM以確保對效能的完全控制。 Linus Torvalds 控制數據流與效率。
P2 Dependency Injection (DI) 所有依賴(例如 service 依賴 repository)必須通過 建構函式 (例如 NewUserService(repo Repository)) 顯式注入,避免使用全局變數。 Griesemer/Go 慣例: 顯式的依賴關係。
P3 I/O Context Passing 任何涉及 I/O (網路、DB) 的函式,其第一個參數必須是 context.Context,以便傳播截止時間和取消訊號。 Go 慣例: 資源管理的標準。
P4 Structured Logging 使用 log/slog 進行結構化日誌記錄。日誌中必須包含 Request ID 或 Trace ID以實現 可觀察性 (Observability) Linus/實用主義: 快速診斷問題的能力。

4. 一致性原則 (Consistency Principle)

核心:保持專案的程式碼風格、命名方式、結構的統一,減少團隊摩擦。

規則 ID 規則內容 (Go 實踐) 哲學依據
C1 Mandatory Formatting 所有提交的程式碼必須通過 gofmtgoimports 格式化。禁止 違反官方程式碼風格的程式碼。 Robert Griesemer 語言設計的嚴謹性與工程規範。
C2 Go Naming Conventions 變數和函式應簡短。未導出的私有成員使用小寫開頭。簡寫必須保持一致(如 HTTP 寫成 http,而非 Http)。 Rob Pike 簡潔與慣例。
C3 Testing In-Package 單元測試程式碼 (e.g., _test.go) 應與被測試程式碼保持在 同一套件,以實現對私有函式和變數的全面測試。 Linus/Go 慣例: 穩定性與可靠性。
C4 Go Modules & Version 專案必須使用 Go Modules 進行依賴管理,並且針對 Go 1.25 版本進行編寫和測試。 Linus/Griesemer 版本控制的嚴格性與相容性。