3.8 KiB
3.8 KiB
| description |
|---|
| 對 Go 程式碼進行全面的審查,包含慣用法、並發安全、錯誤處理與安全性。此指令會呼叫 go-reviewer agent。 |
Go 程式碼審查 (Go Code Review)
此指令會呼叫 go-reviewer agent 來進行針對 Go 語言特性的全面審查。
此指令的功能
- 識別 Go 變更:透過
git diff找出修改過的.go檔案。 - 執行靜態分析:執行
go vet,staticcheck和golangci-lint。 - 安全掃描:檢查是否存在 SQL 注入、指令注入、競態條件 (Race conditions)。
- 並發審查 (Concurrency Review):分析 Goroutine 安全性、Channel 使用方式、Mutex 模式。
- 慣用法檢查 (Idiomatic Go Check):驗證程式碼是否遵循 Go 慣例與最佳實踐。
- 產生報告:按嚴重程度對問題進行分類。
何時使用
在以下情況使用 /go-review:
- 撰寫或修改 Go 程式碼後。
- 提交 Go 變更前。
- 審查包含 Go 程式碼的 Pull Request 時。
- 進入新的 Go 專案庫時。
- 學習 Go 慣用模式時。
審查類別
關鍵問題 (CRITICAL - 必須修復)
- SQL/指令注入漏洞。
- 無同步機制的競態條件。
- Goroutine 洩漏 (Leaks)。
- 硬編碼的憑據。
- 不安全的指標 (Unsafe pointer) 使用。
- 在關鍵路徑中忽略錯誤 (Ignored errors)。
高優先級 (HIGH - 建議修復)
- 缺少帶有上下文 (Context) 的錯誤包裝。
- 使用 Panic 代替返回錯誤。
- Context 未進行傳播。
- 無緩衝 Channel 導致死結 (Deadlocks)。
- 介面未滿足 (Interface not satisfied) 錯誤。
- 缺少 Mutex 保護。
中優先級 (MEDIUM - 考慮調整)
- 非慣用性的程式碼模式。
- 公共匯出項目缺少 Godoc 註釋。
- 低效的字串拼接。
- Slice 未預先分配空間。
- 未使用表格驅動測試 (Table-driven tests)。
執行的自動化檢查
# 靜態分析
go vet ./...
# 進階檢查 (如果已安裝)
staticcheck ./...
golangci-lint run
# 競態偵測
go build -race ./...
# 安全漏洞掃描
govulncheck ./...
使用範例
使用者:/go-review
Agent:
# Go 程式碼審查報告
## 審查檔案
- internal/handler/user.go (已修改)
- internal/service/auth.go (已修改)
## 靜態分析結果
✓ go vet: 無問題
✓ staticcheck: 無問題
## 發現問題
[CRITICAL] 競態條件 (Race Condition)
檔案: internal/service/auth.go:45
問題: 在無同步機制的情況下訪問共享 Map
```go
var cache = map[string]*Session{} // 並發訪問危險!
func GetSession(id string) *Session {
return cache[id] // 競態條件
}
修復方案: 使用 sync.RWMutex 或 sync.Map
var (
cache = map[string]*Session{}
cacheMu sync.RWMutex
)
func GetSession(id string) *Session {
cacheMu.RLock()
defer cacheMu.RUnlock()
return cache[id]
}
[HIGH] 缺少錯誤上下文 (Missing Error Context) 檔案: internal/handler/user.go:28 問題: 返回錯誤時未附帶上下文資訊
return err // 缺少上下文
修復方案: 使用文字或包裝來提供上下文
return fmt.Errorf("get user %s: %w", userID, err)
摘要
- CRITICAL: 1
- HIGH: 1
- MEDIUM: 0
建議: ❌ 在修復 CRITICAL 問題前,禁止合併 (Block merge)
## 核准標準
| 狀態 | 條件 |
|--------|-----------|
| ✅ 核准 (Approve) | 無 CRITICAL 或 HIGH 問題 |
| ⚠️ 警告 (Warning) | 僅存在 MEDIUM 問題 (謹慎合併) |
| ❌ 阻斷 (Block) | 發現 CRITICAL 或 HIGH 問題 |
## 與其他指令的整合
- 先使用 `/go-test` 確保測試通過。
- 如果發生建置錯誤,請使用 `/go-build`。
- 在提交前使用 `/go-review`。
- 對於非 Go 特有的通用問題,請使用 `/code-review`。
## 相關參考
- Agent: `agents/go-reviewer.md`
- 技能: `skills/golang-patterns/`, `skills/golang-testing/`