Go Wiki: 如何寻求帮助
本页面提供了一些关于如何在各种 Go 支持论坛 上成功提问的技巧。
提问之前
在寻求帮助之前,请检查您是否已解决以下常见问题:
务必检查所有错误
务必检查所有错误。经常会遇到报告的与 nil panic 相关的问题,这通常是由于如下代码引起的:
result, err := somefunction()
if err != nil {
log.Println("oops an error happened", err)
// return is missing here
}
// the code then continues to use result which is invalid.
或
result, _ := somefunction()
// code uses result which might be invalid
在寻求帮助之前,您应该确保清楚您的代码正确处理了所有错误情况。
延伸阅读
检查您的代码是否没有数据竞争
意外的运行时 panic 常常是由程序中的数据竞争引起的。如果您的程序包含数据竞争,您需要在寻求帮助之前解决该竞争。
如果您的程序具有良好的测试覆盖率,您可以通过在 `go test` 命令中添加 `-race` 标志来测试数据竞争。
如果您的程序没有良好的测试覆盖率,或者崩溃仅在运行程序时发生,您可以通过将 `-race` 传递给 `go build` 或 `go install` 命令来构建一个启用了 race detector 的版本。
Go 程序中存在数据竞争的行为是未定义的。Go 程序中不存在安全的数据竞争。
延伸阅读
提问
获得帮助的最佳方式是展示
- 您做了什么,最好附上一个简短的、完整的、独立的示例。如果您运行了一个命令,请展示您运行的命令。如果您的程序失败了,请提供失败程序的源代码。如果程序太大,或者您无法共享源代码,请提供一个独立的、可运行的示例,来演示问题。
- 您期望发生什么。如果您期望命令成功完成,请说明。如果您期望程序产生特定的输出,请提供您期望的输出示例。
- 实际发生了什么。如果命令失败了,请包含完整的失败输出,而不仅仅是您认为是原因的单行。如果程序未能产生预期的输出,请包含它实际产生的输出。
其他提示
- 如果您要粘贴命令的输出,请粘贴文本,而不是文本的截图。如果实际上是图片,那也是可以的。
- 如果您要粘贴大量输出,可以考虑使用 pastebin 或 gist 服务。
- 在粘贴代码示例时,请使用 Go playground(除非在您所在的国家/地区无法使用)。
此内容是 Go Wiki 的一部分。