
godoc 的 -play 模式实际将代码提交至 play.golang.org 远程沙箱执行,因此无法访问本地 $GOPATH 中未公开发布的私有包,导致 cannot find package 错误。
godoc 的 `-play` 模式实际将代码提交至 play.golang.org 远程沙箱执行,因此无法访问本地 `$gopath` 中未公开发布的私有包,导致 `cannot find package` 错误。
godoc -play 并非在本地运行示例代码,而是通过 golang.org/x/tools/playground 工具将示例封装为标准 Go 程序,并转发至官方 Playground 服务(play.golang.org)执行。该服务拥有固定的、隔离的构建环境:其 GOROOT 固定为 /usr/local/go,GOPATH 固定为 /go,且仅预装了 Go 标准库及部分托管在 golang.org 域名下的开源包(如 golang.org/x/...)。你本地的 hoge 包(路径为 $GOPATH/src/hoge)既不在标准库中,也未发布至 golang.org 子域名下,因此远程沙箱完全无法解析导入路径 "hoge",报出经典的 cannot find package 错误。
✅ 正确做法与替代方案:
若目标是公开展示:将包托管至 GitHub/GitLab,并使用
golang.org/x/example或github.com/yourname/hoge等符合 Go 模块规范的导入路径,同时确保go.mod已初始化并已推送。play.golang.org 支持直接import "github.com/..."(自 Go 1.13+),但需注意:godoc -play本身仍不支持 GitHub 路径——它只代理到官方 playground,而 playground 对外部模块的支持有限且不稳定。更可靠的方式是放弃godoc -play,改用 Go.dev(新版 godoc 替代品),它对模块化包的示例支持更完善。-
若仅用于本地开发调试:禁用远程 playground,改用本地测试验证示例逻辑:
<code class="bash">go test -run=ExampleHoge -v hoge</code>
只要
ExampleHoge函数位于hoge包的_test.go文件中(注意:必须与被测包同名,即package hoge,而非hoge_test),go test就能正确识别并执行示例。这是 Go 官方推荐的示例验证方式。
⚠️ 关键注意事项:
- 示例函数必须定义在 *与主包同名的 `_test.go
文件中**(如hoge/hoge_test.go中package hoge),否则godoc和go test` 均无法识别; -
hoge_test.go中import "hoge"是合法的,但仅限于本地测试;playground 环境中该导入必然失败; -
godoc -play是遗留功能,Go 官方已转向 pkg.go.dev 作为权威文档平台,后者默认不启用 Playground,但支持渲染带语法高亮的静态示例。
总结:godoc -play 不适用于本地私有包的可运行示例。生产级文档应使用 Go Modules + pkg.go.dev;本地开发请依赖 go test -run=Example* 验证示例正确性,并确保示例代码符合 go doc 规范(含 Output: 注释)。

















