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 程序中不存在安全的数据竞争。

延伸阅读

提问

获得帮助的最佳方式是展示

  1. 您做了什么,最好附上一个简短的、完整的、独立的示例。如果您运行了一个命令,请展示您运行的命令。如果您的程序失败了,请提供失败程序的源代码。如果程序太大,或者您无法共享源代码,请提供一个独立的、可运行的示例,来演示问题。
  2. 您期望发生什么。如果您期望命令成功完成,请说明。如果您期望程序产生特定的输出,请提供您期望的输出示例。
  3. 实际发生了什么。如果命令失败了,请包含完整的失败输出,而不仅仅是您认为是原因的单行。如果程序未能产生预期的输出,请包含它实际产生的输出。

其他提示

  • 如果您要粘贴命令的输出,请粘贴文本,而不是文本的截图。如果实际上是图片,那也是可以的。
  • 如果您要粘贴大量输出,可以考虑使用 pastebin 或 gist 服务。
  • 在粘贴代码示例时,请使用 Go playground(除非在您所在的国家/地区无法使用)。

此内容是 Go Wiki 的一部分。