
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 正常工作,需执行以下三步:
-
定位并修改源码中的导入路径
打开 $GOPATH/src/github.com/rogpeppe/godef/exp/cmd/godef/acme.go(或你本地克隆的 godef 仓库对应路径),将第 4 行:"code.google.com/p/goplan9/plan9/acme"
替换为:
"9fans.net/go/acme"
-
安装新依赖并重新构建
在终端中执行: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 直接更新,该命令会触发旧版构建逻辑并复现错误;务必手动修改后再构建。
验证功能
运行 godef -t "testing.T.Fatalf" 或在编辑器中尝试跳转 Testing.Fatalf,确认能准确定位到 src/testing/testing.go 中的定义。
⚠️ 补充说明:
- 若你使用的是较老的 godef fork(如早期通过 go get 安装的版本),建议先 go get -d github.com/rogpeppe/godef 获取最新源码结构,再应用上述补丁;
- acme 包仅在 godef 的 Acme 编辑器集成模式下使用;若你仅在 Vim/VS Code 中使用,该修改仍为必需,因为构建阶段会完整解析所有导入;
- 后续推荐迁移到更活跃的替代工具(如 gopls),但对轻量环境或遗留配置,此修复可快速恢复 godef 的核心跳转能力。
完成以上步骤后,godef 即可正确解析 Go 1.4+ 标准库(包括 testing, net/http, fmt 等包)中的所有导出符号。










