摘要:(* 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)

}

查看原文