当前位置: 首页 > 面试题库 >

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

向实
2023-03-14
问题内容

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

v := &Vector{}

相对于

v := new(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

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

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



 类似资料:
  • 问题内容: 这两种实例化类的新对象的方式之间有什么区别,如下所示: 当我尝试以下代码时,我可以看到两个对象都可以访问方法,但是t2无法访问(无法解析): 问题答案: 将创建Test类的对象。 但是将创建一个测试子类的对象(在这种情况下,即匿名内部类)。 您可以在那提供任何方法的实现 这样,当从对象调用方法时,它将打印出来。 加成 代码中的编译时错误是由于缺少条件运算符

  • 问题内容: 这两个代码段之间有什么区别? 片段1: 片段2: 问题答案: 唯一的区别是,如果o为null,则返回0,而将抛出。

  • 当我想初始化一个HashMap时,我是Java新手。我可以找到这两个解决方案: 我知道Map是一个接口,HashMap实现了它。但为什么我们这里有两个?他们每个人都有什么好处?

  • 问题内容: 我对python级别的函数和常规函数(用定义)之间的差异感到好奇。(我知道对程序员有什么区别,以及何时使用每个程序员。) 如我们所见-python 知道 这是一个函数,并且是一个常规函数。这是为什么?它们 与python有 什么区别? 问题答案: 它们是同一类型,因此它们的处理方式相同: Python还知道将其定义为lambda函数,并将其设置为函数名称: 换句话说,它影响了该函数将获

  • 问题内容: 我得到以下结果: 如果我执行深度复制: 结果是相同的: 如果我从事分配作业: 那么结果是: 有人可以解释究竟是什么造成了副本之间的差异吗?它和可变且不可变的对象有关吗?如果是这样,您能给我解释一下吗? 问题答案: 普通赋值操作将简单地将新变量指向现有对象。该文档解释了浅拷贝和深拷贝之间的区别: 浅表复制和深度复制之间的区别仅与复合对象(包含其他对象的对象,如列表或类实例)有关: 浅表副

  • 问题内容: 最近,我偶然发现了JavaScript中的方法,并试图推断该方法与使用创建对象的新实例有何不同,以及何时要使用一个实例。 考虑以下示例: 请注意,在两种情况下都观察到相同的行为。在我看来,这两种情况之间的主要区别是: 实际上,中使用的对象构成了新对象的原型,而在声明的属性/函数中,并没有形成原型。 您不能像使用函数语法那样使用语法创建闭包。给定JavaScript的词法(与块)类型范围