当前位置: 首页 > 知识库问答 >
问题:

什么时候一个类型应该是包含另一个类型的结构,什么时候它应该只是“扩展”(?)那种类型的?

孟乐逸
2023-03-14

我目前正在通过做rosalind问题(基本上是一堆生物信息学相关的代码katas)来学习Go。

我当前表示的DNA链类型为:

type DNAStrand struct {
    dna byte[]
}

我最初的原因是封装字节片,这样我就知道它只包含代表核苷酸的字节:'a'、'c'、'g'、't'。我意识到这显然不是瓜分,因为我可以简单地做到:

DNAStrand{[]byte("foo bar")}

由于我的结构只包含一个字节数组,这样做是否更好/更理想:

type DNAStrand []byte

还是让类型包含dna链更好?对于何时使用这两种方法中的任何一种,有什么经验法则吗?

共有1个答案

陈刚洁
2023-03-14

具有零字段的结构非常方便。具有许多字段的结构更加方便。只有一个字段的结构有点特殊,我想不出一个合理的“好”情况下可以在哪里使用它们--尽管它们经常“在野外”被看到。就我而言,我不使用它们。

无论如何,如果您确实需要对Dnastrand切片内容进行更严格/防弹的安全性,那么可以使用单个字段结构并为这个/这样的命名类型定义一个参数检查setter方法。

在这种情况下,如果该定义后来从其他包中使用,那么就没有办法(使用包不安全的模)绕过检查并获得与Dnastrand{[]byte(“foo bar”)}示例等效的结果。

 类似资料:
  • 我目前正在学习做rosalind问题(基本上是一堆与生物信息学相关的代码)。 我目前正在用以下类型表示一条DNA链: 我最初的原因是封装字节片,这样我就知道它只包含代表核苷酸的字节:。我意识到这显然没有保护,因为我可以简单地做: 也不再保证我的dna链包含一个字节数组,其中只有来自这四个字节的元素。 因为我的结构只包含一个字节数组是更好/更理想的做法: 还是让类型包含dna链更好?对于何时使用这两

  • 问题内容: 我目前正在通过处理rosalind问题(基本上是一堆与生物信息学相关的代码katas)来学习Go 。 我目前用一种类型代表一条DNA链: 我最初的原因是封装字节片,所以我知道它只包含代表核苷酸的字节:。我意识到这显然没有被保证,因为我可以这样做: 并且不再保证我的dna链包含一个字节数组,其中只有这四个字节中的元素。 由于我的结构仅包含一个字节数组,因此这样做是更好/更理想的方法: 还

  • 问题内容: 何时使用泛型会引起一些混乱。我看过Java泛型?但仍然有一些问题。 说我有: 我应该使用: 要么 还是取决于执行的任务? 是泛型的,仅用于聚合关系(容器等);也就是说,它们只是用于收藏吗? 问题答案: 人们通常不会使用汽车类型来参数化。他们的车只定义了非常烦人的人。人们也及时换车。因此,即使仅出于语义考虑,我也不会参数化类。 在深入了解此类编程细节之前,请考虑一下您想从现实世界中模仿的

  • 给定一个呈现其子级的简单组件: 问题:儿童道具的道具类型应该是什么? 当我将其设置为对象时,当我使用具有多个子级的组件时,它会失败: 警告:失败的道具类型:提供给

  • 邮件列表和网上讨论中似乎经常出现的一个话题是攻读计算机科学学位的优点(或不足)。对于否定的一方来说,一个似乎一再出现的论点是,他们已经编码了一些年了,他们从来没有使用过递归。 所以问题是: 什么是递归? 何时使用递归? 为什么人们不使用递归?

  • 问题内容: 什么时候应该创建一个检查异常,什么时候应该创建一个运行时异常? 例如,假设我创建了以下类: 我应该如何创建我的?它应该扩展还是?还是我应该只使用它? 问题答案: 在这个话题上有很多分歧。在我的上一份工作中,我们遇到了一些实际问题,运行时异常被遗忘了,直到它们出现在生产环境中(在ageswards.com上),因此我们决定只使用已检查的异常。 在我目前的工作中,我发现在很多情况下都有很多