一尘不染

new()和“常规”分配之间有区别吗?

go

在Go中,以下两个代码段之间存在显着差异:

v := &Vector{}

相对于

v := new(Vector)

阅读 215

收藏
2020-07-02

共1个答案

一尘不染

不,他们返回的是一样的,

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

邮件列表上有一些争论,两者都令人困惑:

https://groups.google.com/forum/?fromgroups=#!topic/golang-
nuts/GDXFDJgKKSs

需要注意的一件事:

new()是获取指向未命名整数或其他基本类型的指针的唯一方法。您可以编写“ p:= new(int)”,但不能编写“ p:=&int
{0}”。除此之外,这是一个优先事项。

来源:https : //groups.google.com/d/msg/golang-
nuts/793ZF_yeqbk/-zyUAPT-e4IJ

2020-07-02