贝利信息

如何修复 godef 以兼容 Go 1.4

日期:2026-01-07 00:00 / 作者:心靈之曲

go 1.4 升级后,godef 因依赖路径变更(`code.google.com/p/goplan9/plan9/acme` 已迁移至 `9fans.net/go/acme`)导致编译失败和标准库符号解析异常,需手动更新导入路径并重新构建。

godef 是一个经典的 Go 符号跳转工具,广泛用于 Vim、Emacs 等编辑器中。但在 Go 1.4 发布后,其源码中引用的 acme 包因上游项目迁移而失效——原 Google Code 托管的 code.google.com/p/goplan9/plan9/acme 已归档,新地址为 9fans.net/go/acme,由 9fans 社区持续维护。

要使 godef 正常工作,需执行以下三步:

  1. 定位并修改源码中的导入路径
    打开 $GOPATH/src/github.com/rogpeppe/godef/exp/cmd/godef/acme.go(或你本地克隆的 godef 仓库对应路径),将第 4 行:

    "code.google.com/p/goplan9/plan9/acme"

    替换为:

    "9fans.net/go/acme"
  2. 安装新依赖并重新构建
    在终端中执行:

    go get -u 9fans.net/go/acme
    cd $GOPATH/src/github.com/rogpeppe/godef
    go build -o godef ./exp/cmd/godef
    go install ./exp/cmd/godef
    ✅ 注意:请勿再使用 go get -u github.com/rogpeppe/godef 直接更新,该命令会触发旧版构建逻辑并复现错误;务必手动修改后再构建。
  3. 验证功能
    运行 godef -t "testing.T.Fatalf" 或在编辑器中尝试跳转 Testing.Fatalf,确认能准确定位到 src/testing/testing.go 中的定义。

⚠️ 补充说明:

完成以上步骤后,godef 即可正确解析 Go 1.4+ 标准库(包括 testing, net/http, fmt 等包)中的所有导出符号。