Go Wiki:HowToAsk

快速簡介

想像一下,您想知道如何從「舊街」前往「新街」。您隨機撥打電話給某人尋求協助,並詢問「我如何最快從舊街 19 號前往新街 3 號?」這個隨機的人是否能協助您?

世界上有很多「新」街和「舊」街,因此他首先需要知道您在什麼國家和城市。如果街道配置很複雜,那麼您可能需要說出您附近的某些建築物。當然,由於速度是一個問題,因此您的交通工具也很重要;您是步行、騎自行車、開車還是開卡車?您可以在無法開卡車的地方步行。

圍繞著直接問題「我如何執行 X?」的那些問題是問題的脈絡,它有助於其他人了解問題。在沒有脈絡的情況下提供建議,可能會導致其他人描述錯誤的城市。

親自詢問這些問題很容易,而且可以快速連續進行,儘管在論壇上,這將導致許多可以避免的來回問題。那麼,如何正確提供問題的脈絡?

如何提出好的問題

論壇上的使用者時間有限。因此,為了加快速度,以下是一個提出問題的小範本,它將獲得更好的答案並更快地回答

您遇到的問題的要點。


您如何遇到此問題?
您想達成什麼目標?
問題的脈絡是什麼?
解決方案的要求是什麼?
脈絡特定的限制/屬性是什麼?
您在 play.golang.org 上的可編譯和可執行範例

關於情況的其他注意事項(製作/學校/玩樂/學習)

需要記住的事項

當然,別太擔心...您無法回答所有可能的問題。不需要針對整件事寫一篇四頁的論文。當需要澄清時,人們隨時可以詢問。

一個糟糕問題的故事

為什麼需要那個範本?讓我們讓您站在回答者的角度,假設您收到這個問題

我如何使用 reflect Set 方法?

從提問者的角度來看,這可能看起來像個簡單的問題。當然,你不知道提問者想做什麼。他是在嘗試設定值、結構、陣列或映射?這表示你需要問第一個問題:你能舉個例子嗎?

現在提問者將提供一個範例

我基本上想這麼做
    m := make(map[string]int)
v := reflect.ValueOf(m)
key := reflect.ValueOf("hello")
val := reflect.ValueOf(123)
v.MapIndex(k).Set(val)
print(m)
但它只是會恐慌。

現在你有一些甚至無法編譯的程式碼。這表示你需要將它貼到某個地方並修正錯誤。將它放在 play.golang.org 上可以更容易看到問題(例如 play.golang.org/p/fCxBlL9V4Y)。

修正方法很簡單;只要改用 SetMapIndex 即可。 當然,這可能不是全部。提問者現在又帶回另一個問題

耶,我讓反射運作了,但它不夠快。
我如何讓它更快?

「更快」是什麼意思?他想要做什麼?所以你需要進一步詢問問題的具體細節。因此你詢問:你想要達成什麼?

我想要實作一個可以儲存一般型別的集合套件。

好吧,但這仍然沒有回答為什麼需要更快。為什麼他要使用 reflect 來做這件事,而你可以改用 map。因此你回答:你不能改用 map(例如 map[type]struct{})嗎?你寫 set 套件的目的是什麼?

我正在寫一個程式,可以處理多個序列並找出共同元素。
主要用途是使用在核苷酸上,而且它應該可以在大型資料集上運作。但它也應該可以在蛋白質上運作,而蛋白質是由另一種型別表示的。
是的,map[NucleotideIndex]struct{} 的運作方式好一點,但仍然不夠快,而且我現在必須為蛋白質撰寫相同的程式碼。

最後,我們有了所有需要的信息。解決方案很簡單:biogo https://code.google.com/p/biogo/ 具有處理大型資料集和並行處理等所需的大部分內容。另外,「NucleotideIndex」是什麼?發問者可能已經找到答案,並說:謝謝,這真的很好。但有可能

哇,看起來不錯,但我正在學習生物資訊課程,我們需要自己撰寫該程式碼。「NucleotideIndex」是「struct {Nucleotide Nucleotide; Index int}」。

這看起來很奇怪,你為什麼要這樣做?不過,我們都做過一些愚蠢的事情,所以……現在你可以開始提出更好的建議:可能處理 map[Type]map[int]struct{} 會容易得多。因為你正在處理序列,而且集合元素總是按遞增順序使用,所以你可以只將索引儲存在陣列中,例如 map[Type][]int。此外,如果記憶體開始成為問題,你可以將其製成執行長度編碼集合……

現在,我們可以對不同集合類型的(優缺點)進行更有意義的討論。

希望在這個冗長的範例之後,你可能了解為什麼提供更多信息很有用。可以避免最初的來回問題。適當的問題可以為發問者和回答者節省時間。

最初的問題可能是

我如何使用 Set 方法搭配 MapIndex 來反映?

我正在嘗試為集合套件設定通用地圖上的值。但是,當我嘗試執行此操作時,它只會引發恐慌。 play.golang.org/p/fCxBlL9V4Y

我在一個程式中使用 set 套件,這個程式會遍歷多個序列並找出序列中的所有共用元素。序列元素可能是核苷酸或蛋白質。這個程式需要能夠處理高達 1GB 的資料大小。

我目前的程式碼可在 github.com/... 取得。

我為生物資訊學課程撰寫這個程式,所以我需要自己實作。

摘要

更多提示

  • 聰明的問題
  • 簡短、自足、正確(可編譯)、範例

    此內容是 Go Wiki 的一部分。