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

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


type T struct {

    size int

}

我见过不同类型的结构初始化。有什么区别?


new(T)     // 1

T{size:1}  // 2

&T{size:1} // 3

以及两种类型的方法声明:


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

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

正确的方法应该是什么?



www说
浏览 152回答 2
2回答

幕布斯6054654

下面是不同的例子:type Animal struct {    Legs      int    Kingdom   string    Carnivore bool}通过引用初始化返回指向结构的指针var tiger = &Animal{4, "mammalia", true}fmt.Println(tiger.Kingdom) // print "mammalia"func changeKingdom(a *Animal) {    a.Kingdom = "alien"    // modify original struct}changeKingdom(tiger) fmt.Println(tiger.Kingdom) // print "alien"构造函数New初始化返回一个带有零值的指针var xAnimal = New(Animal)fmt.Println(xAnimal.Kingdom)   // print ""fmt.Println(xAnimal.Legs)      // print 0fmt.Println(xAnimal.carnivore) // print falsechangeKingdom(xAnimal)fmt.Println(xAnimal.Kingdom)   // print "alien"按值初始化(复制)返回原始结构的单独副本var giraffe = Animal{4, "mammalia", false}fmt.Println(giraffe.Kingdom) // print "mammalia"func changeKingdom(a Animal) {    a.Kingdom = "extraterrestrial"}changeKingdom(giraffe)fmt.Println(giraffe) // print "mammalia"在使用结构体而不是副本时,您会更频繁地处理指针。

aluckdog

分配new 和 &T{size:1} 返回 *TT{size:1} 返回 T内置函数 new 接受类型 T,在运行时为该类型的变量分配存储空间,并返回指向它的类型 *T 的值。变量按照初始值部分中的描述进行初始化。2.任何其他命名类型 T 的方法集由所有接收者类型为 T 的方法组成。 对应指针类型 *T 的方法集是所有接收者为 *T 或 T 的方法的集合(也就是说,它还包含方法集的)。变量 pt * T无功func (r *T) area() int您可以使用 pt.area() 或 t.area()func (r T) area() int你可以用t.area(),不能用pt.area()通常我们使用 func(r *T) area() int
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go