首页 > 后端开发 > Golang > Go 初始化:`&` 与 `new()`:有什么区别?

Go 初始化:`&` 与 `new()`:有什么区别?

Patricia Arquette
发布: 2024-12-18 14:47:10
原创
188 人浏览过

Go Initialization:  `&` vs. `new()`: What's the Difference?

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板