claude-code/claude-zh/commands/go-review.md

3.8 KiB
Raw Blame History

description
對 Go 程式碼進行全面的審查,包含慣用法、並發安全、錯誤處理與安全性。此指令會呼叫 go-reviewer agent。

Go 程式碼審查 (Go Code Review)

此指令會呼叫 go-reviewer agent 來進行針對 Go 語言特性的全面審查。

此指令的功能

  1. 識別 Go 變更:透過 git diff 找出修改過的 .go 檔案。
  2. 執行靜態分析:執行 go vet, staticcheckgolangci-lint
  3. 安全掃描:檢查是否存在 SQL 注入、指令注入、競態條件 (Race conditions)。
  4. 並發審查 (Concurrency Review):分析 Goroutine 安全性、Channel 使用方式、Mutex 模式。
  5. 慣用法檢查 (Idiomatic Go Check):驗證程式碼是否遵循 Go 慣例與最佳實踐。
  6. 產生報告:按嚴重程度對問題進行分類。

何時使用

在以下情況使用 /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/`