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

オープン
#416 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

@fx-kurumi がすでに取り組んでいます。

2026年11月13日 から。

  • #417 @fx-kurumi による — オープン

評価

難易度
1/5
見積もり時間
1〜3時間
初心者へのやさしさ
30/100
issue の種類
リファクタリング
明瞭さ
明確に書かれている
活発さ
停滞
技術スタック
go
領域
backend

調査の方向性

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/.

索引モデルが issue の本文から書いたものです。

説明

现状问题

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/。

主要言語
Go
スター
141
フォーク
28
平均マージ
1日 15時間
マージ済み PR(30日)
113

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

Tencent/LoopForge のほかの issue

Tencent/LoopForge の issue をすべて見る

似ている issue

Go の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。