What is the difference between new(T) and &T{}?

huangapple go评论85阅读模式
英文:

What is the difference between new(T) and &T{}?

问题

在Go语言中,对于给定的结构体类型T,new(T)&T{}有什么区别?

new(T)&T{}都用于创建结构体类型T的实例,但它们的行为略有不同。

new(T)是一个内置函数,它返回一个指向类型T的零值的指针。换句话说,它会分配内存并将其初始化为T的零值。你可以通过解引用指针来访问和修改结构体的字段。

&T{}是一种结构体字面量的写法,它返回一个指向类型T的新实例的指针。与new(T)不同,&T{}允许你在创建实例时提供初始值。你可以在大括号内指定结构体字段的初始值,这些初始值将被用于初始化相应的字段。这种方式更加灵活,可以在创建实例时直接设置字段的值。

总结起来,new(T)只会将实例初始化为T的零值,而&T{}可以在创建实例时提供初始值。

英文:

In Go, given struct type T, what is the difference between new(T) and &T{}?

答案1

得分: 9

没有区别。根据《Effective Go》的说法,它们是等价的。

作为一个极端情况,如果一个复合字面量根本不包含任何字段,它将创建该类型的零值。表达式new(File)和&File{}是等价的。

英文:

There is no difference. According to Effective Go, they are equivalent.

> As a limiting case, if a composite literal contains no fields at all, it creates a zero value for the type. The expressions new(File) and &File{} are equivalent.

答案2

得分: 5

扩展@Doug的回答:

两种形式new(T)&T{}是完全等价的:它们都分配一个零值的T并返回指向该分配内存的指针。唯一的区别是,&T{}不能用于内置类型,比如int;你只能使用new(int)

英文:

Extending @Doug answer:

The two forms new(T) and &T{} are completely equivalent: Both allocate a zero T and return a pointer to this allocated memory. The only difference is, that &T{} doesn't work for builtin types like int; you can only do new(int).

huangapple
  • 本文由 发表于 2015年5月7日 03:54:17
  • 转载请务必保留本文链接:https://go.coder-hub.com/30086302.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定