gpt4 book ai didi

types - 什么时候类型应该是包含另一种类型的结构,什么时候它应该只是 "extend"(?)那个类型?

转载 作者:IT王子 更新时间:2023-10-29 01:16:28 26 4
gpt4 key购买 nike

我目前正在通过 rosalind problems 学习 Go (基本上是一堆生物信息学相关的代码套路)。

我目前正在用一种类型表示一条 DNA 链:

type DNAStrand struct {
dna byte[]
}

我最初的原因是封装字节 slice ,这样我就知道它只包含表示核苷酸的字节:'A'、'C'、'G'、'T'。我意识到这显然不能保证,因为我可以简单地做:

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

并且不再保证我的 dna 链包含一个字节数组,其中的元素仅来自这四个字节。

因为我的结构只包含一个字节数组,这样做更好/更理想吗:

type DNAStrand []byte

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

最佳答案

以你的具体例子为例,我可能会做这样的事情:

type neucleotide char // unexported type users can't construct their own.

type DNAStrand []neucleotide // because users can't construct their own
// nucleotides they also can't construct their
// own DNAStrands.

const (
// These are exported values so they can use these nucleotides to construct a
// DNAStrand with.
A nucleotide = 'A'
C nucleotide = 'C'
G nudleotide = 'G'
T nucleotide = 'T'
)

// This function allows them to actually construct a DNAstrand with a list of
// nucleotides from the constants above.
func New(nts ...nucleotide) DNAStrand {
return nts
}

由于未导出核苷酸类型,用户无法构建自己的类型。您在导出的常量中提供它们的唯一允许实例,因此没有用户可以提供他们自己的新核苷酸。

关于types - 什么时候类型应该是包含另一种类型的结构,什么时候它应该只是 "extend"(?)那个类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14236263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com