我目前正在通过处理rosalind问题(基本上是一堆与生物信息学相关的代码katas)来学习Go 。
我目前用一种类型代表一条DNA链:
type DNAStrand struct { dna byte[] }
我最初的原因是封装字节片,所以我知道它只包含代表核苷酸的字节:'A', 'C', 'G', 'T'。我意识到这显然没有被保证,因为我可以这样做:
'A', 'C', 'G', 'T'
DNAStrand{[]byte("foo bar")}
并且不再保证我的dna链包含一个字节数组,其中只有这四个字节中的元素。
由于我的结构仅包含一个字节数组,因此这样做是更好/更理想的方法:
type DNAStrand []byte
还是让该类型包含dna链更好?对于何时使用两种方法中的任何一种,是否有任何经验法则?
具有零字段的结构很方便。具有许多领域的结构更加方便。仅具有一个字段的结构有点特殊,即使在“野外”经常看到它们,我也想不出在哪里使用它们的合理“好”案例。我,一个,不要使用它们。
无论如何,如果您真的真的需要更严格/更可靠的DNAStrand切片内容安全性,则可以使用单个字段结构并为此/此类命名类型定义参数检查设置方法。
DNAStrand
在这种情况下,如果以后在其他软件包中使用该定义,则无法使用软件包unsafe进行模运算来规避检查并获得与您的DNAStrand{[]byte("foo bar")}示例相同的结果。