(*T)(nil) 和 &T{}/new(T) 有什么区别?戈朗
What the difference between (*T)(nil) and &T{}/new(T)? Golang
谁能解释一下这两个符号之间的细微差别:(*T)(nil)/new(T)
和 &T{}
。
type Struct struct {
Field int
}
func main() {
test1 := &Struct{}
test2 := new(Struct)
test3 := (*Struct)(nil)
fmt.Printf("%#v, %#v, %#v \n", test1, test2, test3)
//&main.Struct{Field:0}, &main.Struct{Field:0}, (*main.Struct)(nil)
}
似乎这个 (*T)(nil)
与其他的唯一区别是它 returns 没有指针或没有指针,但仍然为 Struct 的所有字段分配内存。
new(T)
和&T{}
这两种形式是完全等价的:都分配一个零T和return指向这个分配内存的指针。唯一的区别是,&T{}
不适用于像 int
这样的内置类型;你只能做 new(int)
.
形式 (*T)(nil)
不 分配一个 T
它只是 return 一个指向 T 的 nil 指针。你的 test3 := (*Struct)(nil)
只是惯用语 var test3 *Struct
.
的混淆变体
谁能解释一下这两个符号之间的细微差别:(*T)(nil)/new(T)
和 &T{}
。
type Struct struct {
Field int
}
func main() {
test1 := &Struct{}
test2 := new(Struct)
test3 := (*Struct)(nil)
fmt.Printf("%#v, %#v, %#v \n", test1, test2, test3)
//&main.Struct{Field:0}, &main.Struct{Field:0}, (*main.Struct)(nil)
}
似乎这个 (*T)(nil)
与其他的唯一区别是它 returns 没有指针或没有指针,但仍然为 Struct 的所有字段分配内存。
new(T)
和&T{}
这两种形式是完全等价的:都分配一个零T和return指向这个分配内存的指针。唯一的区别是,&T{}
不适用于像 int
这样的内置类型;你只能做 new(int)
.
形式 (*T)(nil)
不 分配一个 T
它只是 return 一个指向 T 的 nil 指针。你的 test3 := (*Struct)(nil)
只是惯用语 var test3 *Struct
.