Go Wiki:如何提问

快速介绍

想象一下,您想知道如何从“Old street”到“New street”。您致电给一个随机的人寻求帮助,并询问“我如何最快地从 Old street 19 到 New street 3?”。随机的人能够帮助您吗?

世界上有很多“New”和“Old”街道,所以首先他需要知道您在哪个国家和城市。如果街道布局很复杂,那么您可能需要说出您附近的一些建筑物。当然,由于速度是一个问题,因此您的交通方式也很重要;您是步行、骑自行车、开车还是开卡车?您可以步行进入卡车无法进入的地方。

围绕直接问题“我如何 X?”的这些问题是问题的背景,它可以帮助其他人了解问题。在没有背景的情况下提供建议可能意味着对方会描述错误的城市。

面对面很容易提出这些问题,而且可以快速连续地进行,但在论坛上,这会导致很多可以避免的来回提问。那么,如何正确地提供问题的背景?

如何提出一个好问题

论坛上的用户时间有限。因此,为了加快速度,这里提供了一个小模板,用于提出问题,这样可以更快地获得更好的答案

你遇到的问题的要点。


你是如何遇到这个问题的?
你想要实现什么?
问题的背景是什么?
解决方案的要求是什么?
特定于上下文的约束/属性是什么?
你在 play.golang.org 上的可编译和可运行的示例。

关于情况的其他说明(生产/学校/玩耍/学习)

需要记住的事情

当然,不要太担心……您无法回答所有可能的问题。没有必要写一篇关于整个事情的 4 页论文。当需要澄清时,人们总是可以提问。

一个糟糕的问题的故事

为什么需要该模板?让我们让您站在回答者的角度,假设您收到此问题

如何使用 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 即可。当然,这可能不是全部。提问者现在又提出了另一个问题

耶,反射工作了,但不够快。
如何才能让它更快?

“更快”是什么意思?他试图做什么?因此,您需要更多地了解问题的具体情况。所以你问:你试图完成什么?

我正在尝试实现一个可以存储泛型类型的 set 包。

好吧,但那仍然没有回答为什么需要更快。为什么他使用 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

我在一个程序中使用集合包,该程序遍历多个序列并查找序列中的所有公共元素。序列元素可以是核苷酸或蛋白质。该程序需要能够处理高达 1GB 的数据大小。

我的当前代码可在 github.com/... 中获得。

我为生物信息学课程编写此内容,因此我需要自己实现它。

摘要

更多提示

  • 明智的问题
  • 简短、自包含、正确(可编译)、示例

    此内容是 Go Wiki 的一部分。