go 实例化的疑问

//取地址实例化是最广泛的一种结构体实例化方式
go 结构体实例化

(1)基本实例化
type Point struct{

    X int,
    Y int

}
var p Point
p.X=1
p.Y=2

(2)指针类型结构体
ins := new(T)

(3)取结构体地址实例化
ins := &T{}

go 实例化结构体有多种方式,不同方式有什么不一样?
什么情况下该用哪种呢?

阅读 3.9k
2 个回答

这个本质上是什么情况下使用指针的问题
每个人出发点都不一样,我一般只有 struct 类型会使用指针,其他类型(基本类型,map,slice)使用值传递

第1中方式得到的是值对象
第2和3是等价的,都是指针对象
至于应该使用哪种方式要看具体场景
如果需要修改其中的值,就要使用指针接收者;比如

func (p *Point) SetX(i int) {
    p.X = i
}
p := new(Point) // 或者&Point{3, 4}
p.SetX(1)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏