摘要:(* T)(nil)和& T {} / new(T)之间的区别是什么? Golang - IT屋-程序员软件开发技术分享社区
(* T)(nil) 它返回nil指针或没有指针,但仍然为struct的所有字段分配内存。new(T)和& T {} 完全等价:分配一个零T并返回一个指向这个分配的内存的指针。唯一的区别是,& T {} 不适用于内置类型,如 int ;你只能做 new(int)。
package main
import (
"fmt"
)
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)
fmt.Printf("%T, %T, %T \n", test1, test2, test3) // *main.Struct, *main.Struct, *main.Struct
test1.Field = 1
fmt.Println(test1.Field) // 1
test2.Field = 2
fmt.Println(test2.Field) // 2
test3.Field = 3 // test3分配内存,返回一个nil指针,不能使用
// fmt.Println(test3.Field)
}
发表评论