【架构优化】用 slices.Contains 简化 runeval/facts.go 中的 appendUnique 并补充单元测试

Offen
#416 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

@fx-kurumi arbeitet bereits daran.

Seit 13.11.2026.

  • #417 von @fx-kurumi — offen

Bewertung

Schwierigkeit
1/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
30/100
Issue-Typ
Refactoring
Klarheit
Klar beschrieben
Aktivitätsstatus
Veraltet
Tech-Stack
go
Bereich
backend

Rechercherichtung

Read internal/runeval/facts.go and inspect the existing appendUnique function and its BuildFacts caller. An open pull request #417 is already linked, so check its status before taking up the work; the issue’s stated completion criteria are the table-driven tests for the listed cases and passing gofmt, go vet ./internal/runeval/, and go test -cover ./internal/runeval/.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Beschreibung

现状问题

internal/runeval/facts.go 中的 appendUnique 用手写 for 循环判断切片是否已包含某值,再决定是否追加。Go 1.21+ 标准库 slices.Contains 已提供等价能力(仓库 go.mod 为 1.26),手写循环增加了阅读负担,与仓库内其他已统一到 slices.Contains 的写法不一致。

重构方案

  • appendUnique 改为 if slices.Contains(list, value) { return list }; return append(list, value),导入 slices。
  • 函数签名与语义(已存在则原样返回、不存在追加到末尾、保持顺序)不变,唯一调用方 BuildFacts 无需改动。
  • 新增表驱动单元测试覆盖:空切片/nil、已存在、不存在、追加后顺序、空字符串值。

影响范围

仅 internal/runeval/facts.go 一个函数及新增测试文件;不改对外接口与行为。

验证方式

gofmt、go vet ./internal/runeval/、go test -cover ./internal/runeval/。

Vorherrschende Sprache
Go
Sterne
141
Forks
28
Ø Merge
1 T. 15 Std.
Gemergte PRs (30 T.)
113

Entwicklungsumgebung

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus Tencent/LoopForge

Alle Issues in Tencent/LoopForge

Ähnliche Issues

Weitere Issues zu Go

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.