type Vertex struct {
X, Y int
}
你们用哪种方式定义?
var p = Vertex{}
var q = &Vertex{}
var t Vertex
另外: Vertex 和 *Vertex 这两种类型哪个用的多
type Vertex struct {
X, Y int
}
你们用哪种方式定义?
var p = Vertex{}
var q = &Vertex{}
var t Vertex
另外: Vertex 和 *Vertex 这两种类型哪个用的多
如果struct
里只是原始类型,var v Type
就是全部默认值,如果Type
里有其他类型,例如map
,那么你不写个构造函数,或者不用v1 := Type{make(subType),...}
,就不能用这个变量。
除此之外,你的例子里p
, q
, t
三个的含义都不一样,第一个是值,第二个是指针,第三个是默认值或者不能用的变量。(未初始化)
7 回答5.3k 阅读
6 回答6.8k 阅读✓ 已解决
4 回答2.3k 阅读
1 回答3.3k 阅读
2 回答922 阅读✓ 已解决
2 回答2.2k 阅读
1 回答2.2k 阅读
如果的这个对象的作用域只是当前函数,那
Vertex
和*Vertex
都一样,因为*Vertex
不会发生逃逸,这个指针也会被分配在栈上。另外一种情况就是如果这个结构体的对象会作为函数的返回值返回,如果使用了
*Vertex
这样的方式,那就有可能发生逃逸,那编译器就会将它分配在堆上,其实这是个结构体本身很简单,占用不了多大内存 ,完全可以使用Vertex
,因为小对象值拷贝的代价远小于在堆上分配的代价