在 Go 语言中返回其结构地址的方法



在我尝试创建链表数据结构时,我声明了两个结构。

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。新增功能。

相关内容

  • 没有找到相关文章

最新更新