Go 中的值初始化
在 Go 中,使用 & 初始化值与使用 new() 似乎是不同的方法,但是它们功能本质上是相同的。
说明等价
考虑以下代码片段:
v := &Vector{}
和
v := new(Vector)
这里,Vector 表示自定义类型。两种方法都为 Vector 结构体分配内存并返回指向所分配内存的指针。
为了演示这种等价性,让我们比较结果类型:
package main import "fmt" import "reflect" type Vector struct { x int y int } func main() { v := &Vector{} x := new(Vector) fmt.Println(reflect.TypeOf(v)) fmt.Println(reflect.TypeOf(x)) }
输出:
*main.Vector *main.Vector
正如видно一样,这两种方法都会产生指向Vector的指针type.
历史背景和偏好
虽然两种方法达到相同的结果,但它们各自的历史可能会影响开发人员的偏好。 new() 在 Go 开发的早期引入,是初始化指向基本类型(如整数)的指针的唯一方法。从那时起,& 被添加为适用于任何类型的更通用方法。
结论
最终, & 和 new() 之间的选择是一个问题的偏好。两种方法都会分配内存并返回指向已分配内存的指针,从而实现相同的功能。
以上是Go 初始化:`&` 与 `new()`:有什么区别?的详细内容。更多信息请关注PHP中文网其他相关文章!