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 的一部分。