2 回答

TA贡献1876条经验 获得超7个赞
下面是不同的例子:
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 0
fmt.Println(xAnimal.carnivore) // print false
changeKingdom(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"
在使用结构体而不是副本时,您会更频繁地处理指针。

TA贡献1847条经验 获得超7个赞
分配
new 和 &T{size:1} 返回 *T
T{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
- 2 回答
- 0 关注
- 151 浏览
添加回答
举报