Go &T{}和new(T)和(*T)(nil)区别

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值