Go中的结构初始化和方法声明

xuanzhui :

我是Go语言的新手,并且对结构很好奇。让我们定义一个结构T

type T struct {
    size int
}
  1. 我已经看到了不同类型的结构初始化。有什么区别?

    new(T)     // 1
    T{size:1}  // 2
    &T{size:1} // 3
    
  2. 以及两种类型的方法声明:

    func (r *T) area() int // 1
    func (r T) area() int  // 2
    

    什么是正确的方法?

hotzenplotz:
  1. 分配

new和&T {size:1}返回* T

T {size:1}返回T

内置函数new采用类型T,在运行时为该类型的变量分配存储,并返回指向它的* T类型的值。如初始值部分中所述,初始化变量。

2。

其他任何已命名类型T的方法集都包含接收者类型T的所有方法。相应指针类型* T的方法集是接收者* T或T的所有方法的集合(也就是说,它还包含方法集T)。

var pt * T

变数

函数(r * T)area()int

您可以使用pt.area()或t.area()

func(r T)area()int

您可以使用t.area(),不能使用pt.area()

通常我们使用func(r * T)area()int

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章