跳转到正文
报告库
用途分类 / 开发辅助

Golang Modernize Skill 安全审计

作者说它能做什么(原文)

Modernize Golang code to use recent language features, standard library improvements, and idiomatic patterns. Use when reviewing Go code with old-style patterns, when encountering a deprecation warning, or when the user asks for modernization, a Go version upgrade (e.g. to Go 1.27), or a CI/tooling refresh. Not for structural refactors, extracting functions, or moving code between packages (→ See

第三方安全检查结论

发现安全风险

已检查文件
4
发现的风险
6
会不会运行危险命令?检查是否下载程序后直接运行、让他人远程控制电脑,或藏起要运行的命令。发现 1 项风险
中风险

默认运行项目测试会执行仓库中的代码

原文依据:1 处
发现了什么

工作流要求运行 `go test ./...`,而不只是静态读取源码。Go 测试及其初始化代码会在用户机器上执行;若审查的是不可信或刚拉取的仓库,这超出了纯代码扫描。

为什么需要注意

恶意或有副作用的测试代码可能读取环境变量和本地文件、启动进程,或在允许网络时发送数据。

这是活跃工作流,不是示例:Skill 要求运行 `go test ./...`。该命令会编译并执行仓库中的测试、包初始化代码及测试进程调用的程序。对不可信仓库,这可能在用户权限下读取文件、使用凭据或访问网络。用户可要求仅做静态扫描,或在无凭据、无网络、受限文件系统的沙箱中测试。

SKILL.md:52来自说明文档打开原文件
4. **Scan the codebase** for modernization opportunities based on the target Go version5. **Run `golangci-lint`** with the `modernize` linter if available, and `go test ./...` — Go 1.27+ runs the `stdversion` vet check by default, flagging APIs newer than the module's `go` directive; bump the directive or revert the suggestion, don't ignore the hit6. **Suggest improvements contextually**:
会不会泄露文件和密钥?检查是否发送含密码或密钥的文件,以及代码里是否直接写了密钥。未发现风险
会不会删除文件或一直在后台运行?检查是否大范围删除文件、改写磁盘,或设置自动启动。发现 3 项风险
中风险

全库扫描会在未要求第二次确认时进入多文件改写

原文依据:2 处
发现了什么

显式扫描完成后,指令直接要求应用全库改写。隔离 worktree 保护主工作树,但并不等于用户已批准每项迁移,也不会消除大量文件被改动的风险。

为什么需要注意

自动迁移可能改变 API、序列化、随机数、依赖或构建行为,并产生庞大且难以审核的差异。

全库模式先称扫描为只读,但随后直接要求在隔离 worktree 中应用全库改写,没有明确要求用户逐项批准。worktree 可保护主工作树,却仍会创建并大范围修改文件;显式调用是否同时授权自动应用并不清楚。用户可要求扫描后仅提交报告,并在批准具体迁移后才创建或修改 worktree。

SKILL.md:32来自说明文档打开原文件
- **Inline mode** (developer is actively coding): suggest only modernizations relevant to the current file or feature. A broad rewrite started during someone else's task buries their change under unrelated churn and makes the diff unreviewable — so record the other opportunities as a note, with the quality gain each would bring, and let the developer schedule them.- **Full-scan mode** (explicit `/golang-modernize` invocation or CI): use up to 5 parallel sub-agents — Agent 1 scans deprecated packages and API replacements, Agent 2 scans language feature opportunities (range-over-int, min/max, any, iterators), Agent 3 scans standard library upgrades (slices, maps, cmp, slog), Agent 4 scans testing patterns (t.Context, b.Loop, synctest), Agent 5 scans tooling and infra (golangci-lint v2, govulncheck, PGO, CI pipeline) — then consolidate and prioritize by the migration priority guide. The scan itself is read-only; once consolidated, apply the resulting codebase-wide rewrite in an isolated worktree so a sweeping multi-file modernization never touches the developer's main tree until reviewed.
查看另外 1 个位置
SKILL.md:56来自说明文档打开原文件
   - If invoked explicitly via `/golang-modernize` or in CI, scan and suggest across the entire codebase.7. **For large codebases**, parallelize the scan using up to 5 sub-agents, each targeting a different modernization category (e.g. deprecated packages, language features, standard library upgrades, testing patterns, tooling and infra). Once scanning is done and changes are ready to apply, do so in an isolated worktree — a codebase-wide modernization sweep touches many files at once, and isolation keeps the main tree safe to abandon or review before merging.8. **Before suggesting a dependency update**, run `go mod tidy` and the test suite to verify compatibility. Ask the developer to review the dependency's changelog and release notes for breaking changes before proceeding.
中风险

仅为提出依赖升级建议也会先修改模块文件

原文依据:1 处
发现了什么

指令要求在“提出”依赖更新之前运行 `go mod tidy`。该命令可能重写 `go.mod` 和 `go.sum`、删除当前未引用依赖,并下载模块,因此建议阶段并非只读。

为什么需要注意

工作树可能出现意外依赖变更;在含构建标签、生成代码或不完整环境的项目中,依赖还可能被错误移除或重新解析。

该指令明确要求在“提出”依赖更新之前运行 `go mod tidy` 和测试。`go mod tidy` 是写操作,可能重排或移除 `go.mod`/`go.sum` 条目;测试也会执行仓库代码。因此,本应处于建议阶段的动作可能改变用户文件并运行不可信代码。用户可要求先提供建议与变更预览,获批后再在隔离 worktree 中执行 tidy 和测试。

SKILL.md:57来自说明文档打开原文件
7. **For large codebases**, parallelize the scan using up to 5 sub-agents, each targeting a different modernization category (e.g. deprecated packages, language features, standard library upgrades, testing patterns, tooling and infra). Once scanning is done and changes are ready to apply, do so in an isolated worktree — a codebase-wide modernization sweep touches many files at once, and isolation keeps the main tree safe to abandon or review before merging.8. **Before suggesting a dependency update**, run `go mod tidy` and the test suite to verify compatibility. Ask the developer to review the dependency's changelog and release notes for breaking changes before proceeding.9. **If the developer explicitly ignores a suggestion**, write a short memo to `.modernize` in the project root so it is not suggested again. Format: one line per ignored suggestion, with a short description.
低风险

拒绝建议仍会在项目根目录留下持久记录

原文依据:2 处
发现了什么

如果用户明确忽略某项建议,Skill 会写入 `.modernize`。这会把用户的拒绝转化为仓库文件变更,即使用户只想停止讨论而没有要求记录。

为什么需要注意

可能产生未预期的未提交文件,或把日期和团队技术决策纳入版本控制并影响后续扫描结果。

这是明确的持久写入指令:用户忽略建议后,Skill 会在项目根目录写 `.modernize`。虽然目的是避免重复提醒,且内容只是简短备忘,但“忽略建议”不一定等于授权修改仓库,也可能造成未预期的工作树变更或提交记录。用户可要求仅在会话内记住选择,或写入前单独确认。

SKILL.md:58来自说明文档打开原文件
8. **Before suggesting a dependency update**, run `go mod tidy` and the test suite to verify compatibility. Ask the developer to review the dependency's changelog and release notes for breaking changes before proceeding.9. **If the developer explicitly ignores a suggestion**, write a short memo to `.modernize` in the project root so it is not suggested again. Format: one line per ignored suggestion, with a short description.
查看另外 1 个位置
SKILL.md:62来自说明文档打开原文件
### `.modernize` file format```# Ignored modernization suggestions# Format: <date> <category> <description>2026-01-15 slog-migration Team decided to keep zap for now2026-02-01 math-rand-v2 Legacy module requires math/rand compatibility```
会不会绕过安全保护?检查是否跳过网站安全验证、开放过多文件权限,或取消操作前的确认。发现 1 项风险
低风险

授权范围包含所有 git 子命令和外部网络工具

原文依据:2 处
发现了什么

权限声明使用 `Bash(git:*)`,同时允许写文件、WebFetch、WebSearch 和子代理。实际现代化流程只明确需要检查、隔离 worktree 和受控编辑;通配 git 权限也覆盖推送、删除分支和破坏性历史操作。

为什么需要注意

若 Skill 指令被误解、被项目内容诱导或代理出错,可能影响本地 Git 状态或远端仓库;网络工具也扩大了源码或元数据被外发的可能范围。权限本身不证明这些操作会发生。

这段证据能说明什么

权限声明确实允许任意匹配的 git 命令、文件写入、联网检索和代理,但可用能力本身不证明 Skill 会推送、删分支或改写历史。可见工作流只明确提到隔离 worktree,并强调主树可审查或放弃;没有可见的 push/reset/删除指令。风险取决于宿主如何强制 `allowed-tools`。用户可限制 git 为只读及 worktree 操作,并禁用不需要的网络与写权限。

这项判断针对展示的代码和适用条件,不表示风险已经实际发生。
SKILL.md:18来自说明文档打开原文件
    skill-library-version: "1.27"allowed-tools: Read Edit Write Glob Grep Bash(go:*) Bash(golangci-lint:*) Bash(git:*) Agent WebFetch WebSearch AskUserQuestion EnterWorktree ExitWorktreepaths:
查看另外 1 个位置
SKILL.md:56来自说明文档打开原文件
   - If invoked explicitly via `/golang-modernize` or in CI, scan and suggest across the entire codebase.7. **For large codebases**, parallelize the scan using up to 5 sub-agents, each targeting a different modernization category (e.g. deprecated packages, language features, standard library upgrades, testing patterns, tooling and infra). Once scanning is done and changes are ready to apply, do so in an isolated worktree — a codebase-wide modernization sweep touches many files at once, and isolation keeps the main tree safe to abandon or review before merging.8. **Before suggesting a dependency update**, run `go mod tidy` and the test suite to verify compatibility. Ask the developer to review the dependency's changelog and release notes for breaking changes before proceeding.
会不会误导 AI 或隐藏内容?检查工作说明是否要求 AI 忽略你的指令、干扰检查结果,或夹带看不见的文字。发现 1 项风险
低风险

Skill 被要求劝说用户接受与当前任务无关的改进

原文依据:3 处
发现了什么

一条活跃指令要求代理“TRY TO CONVINCE”用户,即使同时禁止直接执行无关的大型重构。这可能使原本应中立呈现的可选维护工作带有施压倾向。后续“一次询问并尊重跳过”的规则降低了风险。

为什么需要注意

用户可能因代理反复强调质量收益而批准超出原任务的工作,增加审查负担和变更范围。

这段代码的正常用途

“TRY TO CONVINCE”带有劝说性,但上下文同时禁止在其他任务中进行大型重构。更具体的模式规则要求只询问一次、允许跳过,并在用户跳过后立即停止且本会话不再提出;内联模式也只建议当前相关事项,把其他机会留作备注。因此可见行为主要是征求是否接收建议,而非绕过决定或强制改动。用户仍可直接选择跳过。

这项判断针对展示的代码和适用条件,不表示风险已经实际发生。
SKILL.md:42来自说明文档打开原文件
You MUST NEVER conduct large refactoring if the developer is working on a different task. But TRY TO CONVINCE your human it would improve the code quality.
查看另外 2 个位置
SKILL.md:34来自说明文档打开原文件
**Questions:** In Inline mode, this skill triggers contextually while the developer is working on something else — ask via the environment's question tool, once, whether to suggest the modernization opportunities noticed or skip for now. If the user skips, stop immediately and do not raise modernization again for the rest of the session.
SKILL.md:31来自说明文档打开原文件
- **Inline mode** (developer is actively coding): suggest only modernizations relevant to the current file or feature. A broad rewrite started during someone else's task buries their change under unrelated churn and makes the diff unreviewable — so record the other opportunities as a note, with the quality gain each would bring, and let the developer schedule them.- **Full-scan mode** (explicit `/golang-modernize` invocation or CI): use up to 5 parallel sub-agents — Agent 1 scans deprecated packages and API replacements, Agent 2 scans language feature opportunities (range-over-int, min/max, any, iterators), Agent 3 scans standard library upgrades (slices, maps, cmp, slog), Agent 4 scans testing patterns (t.Context, b.Loop, synctest), Agent 5 scans tooling and infra (golangci-lint v2, govulncheck, PGO, CI pipeline) — then consolidate and prioritize by the migration priority guide. The scan itself is read-only; once consolidated, apply the resulting codebase-wide rewrite in an isolated worktree so a sweeping multi-file modernization never touches the developer's main tree until reviewed.
会不会偷偷改推广链接或收款方?检查是否强制替换推广链接或收款对象,同时要求隐瞒更改。未发现风险

Skill 逻辑拆解

8 个说明模块

此 Skill 面向 Go 代码现代化:读取项目的 Go 版本和 `.modernize` 记录,扫描代码,并运行静态检查与完整测试套件。

查看原文
SKILL.md:48来自说明文档打开原文件
1. **Check the project's `go.mod` or `go.work`** to determine the current Go version (`go` directive)2. **Check the latest Go version** using the Go Version Changelogs table below and suggest upgrading if the project's `go.mod` is behind3. **Read `.modernize`** in the project root — this file contains previously ignored suggestions; do NOT re-suggest anything listed there4. **Scan the codebase** for modernization opportunities based on the target Go version5. **Run `golangci-lint`** with the `modernize` linter if available, and `go test ./...` — Go 1.27+ runs the `stdversion` vet check by default, flagging APIs newer than the module's `go` directive; bump the directive or revert the suggestion, don't ignore the hit6. **Suggest improvements contextually**:

显式全库扫描会并行检查五类问题;扫描阶段声称只读,但随后要求在隔离 worktree 中应用全库改写。

查看原文
SKILL.md:32来自说明文档打开原文件
- **Inline mode** (developer is actively coding): suggest only modernizations relevant to the current file or feature. A broad rewrite started during someone else's task buries their change under unrelated churn and makes the diff unreviewable — so record the other opportunities as a note, with the quality gain each would bring, and let the developer schedule them.- **Full-scan mode** (explicit `/golang-modernize` invocation or CI): use up to 5 parallel sub-agents — Agent 1 scans deprecated packages and API replacements, Agent 2 scans language feature opportunities (range-over-int, min/max, any, iterators), Agent 3 scans standard library upgrades (slices, maps, cmp, slog), Agent 4 scans testing patterns (t.Context, b.Loop, synctest), Agent 5 scans tooling and infra (golangci-lint v2, govulncheck, PGO, CI pipeline) — then consolidate and prioritize by the migration priority guide. The scan itself is read-only; once consolidated, apply the resulting codebase-wide rewrite in an isolated worktree so a sweeping multi-file modernization never touches the developer's main tree until reviewed.

元数据没有配置安装步骤,但授予了读写、Go、golangci-lint、所有 git 子命令、网络搜索和子代理能力。

查看原文
SKILL.md:13来自说明文档打开原文件
    homepage: https://github.com/samber/cc-skills-golang    requires:      bins:        - go    install: []    skill-library-version: "1.27"allowed-tools: Read Edit Write Glob Grep Bash(go:*) Bash(golangci-lint:*) Bash(git:*) Agent WebFetch WebSearch AskUserQuestion EnterWorktree ExitWorktreepaths:

工具指南会建议升级工具链、添加最新版本工具依赖并运行自动代码转换;这些命令不仅生成建议,也可能修改源码或模块文件。

查看原文
references/tooling.md:13来自说明文档打开原文件
# Update go.mod to target a newer versiongo mod edit -go=1.27# Update toolchaingo get toolchain@latest```
references/tooling.md:30来自说明文档打开原文件
```bash# Pin in the module (Go 1.24+)go get -tool golang.org/x/vuln/cmd/govulncheck@latest# Scan source codego tool govulncheck ./...
references/tooling.md:64来自说明文档打开原文件
```bashgo fix ./...          # applies the enabled safe transformationsgo tool fix help      # check exact fixer coverage for the installed toolchain```
从这里开始 · 工作说明SKILL.md
golang-modernize
连线表示工作说明包含的模块,不是实际运行顺序。点击模块可查看原文。 另有 1 个章节,可在原文件中查看。

文件引用关系图

3 处引用
哪些文件发起引用引用了什么
连线表示真实的文件引用,不是运行顺序。点击节点可高亮相关连线,并查看具体文件和原文位置。虚线表示还有文件需要定位。
文件与检查记录4 个文件

检查范围与遗漏

逐文件查看涉及的内容

下方列出本次涉及的原文范围;纳入检查不代表已查清所有问题。

  • SKILL.md已纳入全文
  • references/tooling.md已纳入全文
  • references/versions.md已纳入全文
  • evals/evals.json已纳入全文

这份报告只针对上方版本。我们看了拿到的代码和说明文件,没有实际运行 Skill,也没有检查它另外安装的软件包。因此,这不是“保证安全”的承诺;换了版本或使用环境,结果也可能不同。

  • SKILL.md工作说明
  • evals/evals.json配套文件
  • references/tooling.md配套文件
  • references/versions.md配套文件

代码和说明中提到的操作

连接外部网站
SKILL.md:12来自说明文档打开原文件
    emoji: "🔄"    homepage: https://github.com/samber/cc-skills-golang    requires:
SKILL.md:77来自说明文档打开原文件
| ------- | ------------- | --------------------------- || Go 1.21 | August 2023   | <https://go.dev/doc/go1.21> || Go 1.22 | February 2024 | <https://go.dev/doc/go1.22> |
SKILL.md:78来自说明文档打开原文件
| Go 1.21 | August 2023   | <https://go.dev/doc/go1.21> || Go 1.22 | February 2024 | <https://go.dev/doc/go1.22> || Go 1.23 | August 2024   | <https://go.dev/doc/go1.23> |
运行命令
SKILL.md:18来自说明文档打开原文件
    skill-library-version: "1.27"allowed-tools: Read Edit Write Glob Grep Bash(go:*) Bash(golangci-lint:*) Bash(git:*) Agent WebFetch WebSearch AskUserQuestion EnterWorktree ExitWorktreepaths:
references/tooling.md:9来自说明文档打开原文件
```bash# Check current version
references/tooling.md:30来自说明文档打开原文件
```bash# Pin in the module (Go 1.24+)
读取文件
evals/evals.json:36来自说明文档打开原文件
      "name": "safety-over-cosmetic",      "prompt": "Modernize this Go 1.24 HTTP file server code. Suggest all improvements.\n\n```go\npackage fileserver\n\nimport (\n    \"fmt\"\n    \"io\"\n    \"net/http\"\n    \"os\"\n    \"path/filepath\"\n)\n\ntype FileServer struct {\n    baseDir string\n}\n\nfunc NewFileServer(baseDir string) *FileServer {\n    return &FileServer{baseDir: baseDir}\n}\n\nfunc (fs *FileServer) ServeHTTP(w http.ResponseWriter, r *http.Request) {\n    userPath := r.URL.Query().Get(\"path\")\n    if userPath == \"\" {\n        http.Error(w, \"missing path parameter\", http.StatusBadRequest)\n        return\n    }\n\n    fullPath := filepath.Join(fs.baseDir, filepath.Clean(userPath))\n\n    f, err := os.Open(fullPath)\n    if err != nil {\n        http.Error(w, \"file not found\", http.StatusNotFound)\n        return\n    }\n    defer f.Close()\n\n    w.Header().Set(\"Content-Type\", \"application/octet-stream\")\n    io.Copy(w, f)\n}\n\nfunc process(data interface{}) interface{} {\n    return data\n}\n\nfunc minVal(a, b int) int {\n    if a < b { return a }\n    return b\n}\n\nfunc formatAddr(host string, port int) string {\n    return fmt.Sprintf(\"%s:%d\", host, port)\n}\n```\n\nThe project targ       "trap": "The code has a path traversal vulnerability (filepath.Join + filepath.Clean is insufficient). Without the skill, the model may prioritize cosmetic changes (interface{}->any, min builtin) over the security-critical os.Root fix 
evals/evals.json:104来自说明文档打开原文件
      "name": "addcleanup-vs-setfinalizer",      "prompt": "Review this resource management code for Go 1.24 best practices.\n\n```go\npackage pool\n\nimport (\n    \"database/sql\"\n    \"fmt\"\n    \"runtime\"\n)\n\ntype ManagedConn struct {\n    db   *sql.DB\n    name string\n    dsn  string\n}\n\nfunc NewManagedConn(dsn, name string) (*ManagedConn, error) {\n    db, err := sql.Open(\"postgres\", dsn)\n    if err != nil {\n        return nil, fmt.Errorf(\"opening db: %w\", err)\n    }\n    mc := &ManagedConn{db: db, name: name, dsn: dsn}\n    runtime.SetFinalizer(mc, func(c *ManagedConn) {\n        c.db.Close()\n    })\n    return mc, nil\n}\n\ntype TempFile struct {\n    path string\n    fd   int\n}\n\nfunc NewTempFile(path string, fd int) *TempFile {\n    tf := &TempFile{path: path, fd: fd}\n    runtime.SetFinalizer(tf, func(f *TempFile) {\n        syscallClose(f.fd)\n        osRemove(f.path)\n    })\n    return tf\n}\n\nfunc syscallClose(fd int) {}\nfunc osRemove(path string) {}\n```\n\nModernize the cleanup pattern. Explain why the current approach has problems.",      "trap": "New Go code should consider runtime.AddCleanup instead of runtime.SetFinalizer because it is less error-prone. The key API difference: AddCleanup takes the resource as a separate argument (not the whole object). Without the s 
references/versions.md:423来自说明文档打开原文件
path := filepath.Join(baseDir, userInput)data, err := os.ReadFile(path)
读取密钥或账号配置
evals/evals.json:90来自说明文档打开原文件
      "name": "cmp-or-chained-defaults",      "prompt": "Clean up this configuration loading code. We're on Go 1.22. The nested if/else chains for default values are hard to read.\n\n```go\npackage config\n\nimport \"os\"\n\ntype Config struct {\n    Host     string\n    Port     string\n    LogLevel string\n    Region   string\n    Mode     string\n}\n\nfunc LoadConfig() Config {\n    host := os.Getenv(\"HOST\")\n    if host == \"\" {\n        host = os.Getenv(\"HOSTNAME\")\n    }\n    if host == \"\" {\n        host = os.Getenv(\"SERVICE_HOST\")\n    }\n    if host == \"\" {\n        host = \"localhost\"\n    }\n\n    port := os.Getenv(\"PORT\")\n    if port == \"\" {\n        port = os.Getenv(\"HTTP_PORT\")\n    }\n    if port == \"\" {\n        port = \"8080\"\n    }\n\n    logLevel := os.Getenv(\"LOG_LEVEL\")\n    if logLevel == \"\" {\n        logLevel = os.Getenv(\"LOGLEVEL\")\n    }\n    if logLevel == \"\" {\n        logLevel = \"info\"\n    }\n\n    region := os.Getenv(\"AWS_REGION\")\n    if region == \"\" {\n        region = os.Getenv(\"REGION\")\n    }\n    if region == \"\" {\n        region = \"us-east-1\"\n    }\n\n    mode := os.Getenv(\"APP_MODE\")\n    if mode == \"\" {\n        mode = \"production\"\n       "trap": "Go 1.22 introduced cmp.Or(a, b, c...) which returns the first non-zero value. It collapses multi-step default chains to single lines. Without the skill, the model will likely keep the if/else chains or use a custom helper fun 
references/versions.md:175来自说明文档打开原文件
// Beforeaddr := os.Getenv("ADDR")if addr == "" { addr = ":8080" }
references/versions.md:179来自说明文档打开原文件
// After (Go 1.22+)addr := cmp.Or(os.Getenv("ADDR"), ":8080")```
修改文件
evals/evals.json:303来自说明文档打开原文件
      "name": "go127-synctest-http",      "prompt": "This Go 1.27 HTTP handler test is flaky in CI because of real timeouts. Make it deterministic and fast.\n\n```go\npackage api\n\nimport (\n    \"io\"\n    \"net/http\"\n    \"net/http/httptest\"\n    \"testing\"\n    \"time\"\n)\n\nfunc Handler(w http.ResponseWriter, r *http.Request) {\n    time.Sleep(100 * time.Millisecond) // simulates slow backend\n    w.Write([]byte(\"ok\"))\n}\n\nfunc TestHandlerResponds(t *testing.T) {\n    srv := httptest.NewServer(http.HandlerFunc(Handler))\n    defer srv.Close()\n\n    client := &http.Client{Timeout: 5 * time.Second}\n    resp, err := client.Get(srv.URL)\n    if err != nil {\n        t.Fatal(err)\n    }\n    defer resp.Body.Close()\n    body, _ := io.ReadAll(resp.Body)\n    if string(body) != \"ok\" {\n        t.Fatalf(\"got %q\", body)\n    }\n}\n\nfunc TestHandlerClientTimeout(t *testing.T) {\n    srv := httptest.NewServer(http.HandlerFunc(Handler))\n    defer srv.Close()\n\n    client := &http.Client{Timeout: 50 * time.Millisecond} // shorter than handler sleep\n    _, err := client.Get(srv.URL)\n    if err == nil {\n        t.Fatal(\"expected timeout error\")\n    }\n}\n```\n\nProvide the fixed tests. Do not just incre       "trap": "testing/synctest makes time-based tests deterministic, but a plain httptest.NewServer uses the real network, which stalls inside a synctest bubble (the bubble's fake clock waits forever on real I/O). Go 1.27 added httptest.Ne 
读取了多少行
1,548
文件校验值(用于核对版本)
595699934fd3a33bd2afc08a2590a401b681f51845aee991a943a44aa6a735f7