在我尝试创建链表数据结构时,我声明了两个结构。
package main
import "fmt"
type listElement struct {
data int
next *listElement
}
type List struct {
first *listElement
last *listElement
len int
}
我想创建一个返回空列表的方法。到目前为止,我只能创建函数
func new() *List {
return &List{}
}
这与我在多个数据结构存储库中看到的结果相同。是否可以创建一个返回新空列表的方法List.new()
?
是的,当然可以定义一个返回 List 值的方法,但由于你需要一个 List 值来调用方法,这有点尴尬:
package main
type List struct{}
func (List) New1() *List {
return &List{}
}
func (*List) New2() *List {
return &List{}
}
func main() {
_ = List{}.New1()
_ = (&List{}).New2()
_ = (*List)(nil).New2()
}
老实说,我不认为这比 NewList 函数更好,后者在 Go 中是惯用语:
func NewList() *List {
return &List{}
}
如果您的包称为 list,请将函数命名为 New,因此它被称为list.New()
。
在所有情况下,论点和正文都是相同的。它们只是在调用方式上有所不同,并且包函数最容易使用。(请参阅JimB评论中的链接,了解另一个略有不同的变体。
看来你还没有读过《有效围棋》,它暗示了上述大部分内容。
用于创建环的新实例的函数。Ring(这是 Go 中构造函数的定义)通常称为 NewRing,但由于 Ring 是包导出的唯一类型,并且由于包称为 ring,因此它只称为 New,包的客户端将其视为 ring。新增功能。