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

(* T)(nil)和&T {} / new(T)有什么区别?高朗

羊舌承
2023-03-14
问题内容

可能有人解释一下这两个符号之间的细微差别:(*T)(nil)/new(T)&T{}

type Struct struct {
    Field int
}

func main() {
    test1 := &Struct{}
    test2 := new(Struct)
    test3 := (*Struct)(nil)
    fmt.Printf("%#v, %#v, %#v \n", test1, test2, test3)
    //&main.Struct{Field:0}, &main.Struct{Field:0}, (*main.Struct)(nil) 
}

看起来这两者之间的唯一区别(*T)(nil)是它返回nil指针或不返回任何指针,但仍为Struct的所有字段分配内存。


问题答案:

这两种形式的new(T)&T{}是完全等效的:两个分配零T和一个指针返回到该分配的内存。唯一的区别是,&T{}对于像int;
这样的内置类型不起作用。你只能做new(int)

该表格(*T)(nil)没有 分配T它只是返回一个零指针T.你test3 := (*Struct)(nil)仅仅是一个混淆的惯用的变种var test3 *Struct



 类似资料:
  • 请问这2种写法有什么区别?我VSCode运行都是可以运行的。

  • 问题内容: 我遇到了像这样的Java代码: 以上三种之间的区别是什么?它们在Java中如何称呼这种类型的类或接口声明? 问题答案: 好吧,前两个没有什么区别-它们只是为 type参数 (或)使用了不同的名称。 第三个不是有效的声明- 用作提供类型实 参 时使用的 通配符 ,例如,意味着引用某种类型的列表,但我们不知道是什么。 __ 所有这些都是 泛型 ,这是一个很大的话题。您可能希望通过以下资源了

  • 问题内容: 考虑: 我尝试通过以下方式调用此过程: 但这只会产生 但是,如果我将其更改为 一切正常。尽管文档指出这是正确的语法,但这仍然可行。 为什么什么时候不工作? 问题答案: 如您的文档所述,Yup ..是可从ODBC驱动程序使用的构造/语法。 还有的T-SQL文档中没有提及,只。 它不起作用,因为它不是T-SQL。

  • 当扩展在其他板条箱中定义的特性时,似乎有两种默认实现新特性的方法。 性状的原始定义是 为了扩展该特征的功能,我们定义了一个特征, 现在,由于我们希望该功能在默认情况下可用,我们可以实现以下功能 我所观察到的是,当与trait对象混合时,这两种实现都是必需的。 我理解

  • 我正在使用VS2022,。NET 6,C#10,在项目范围内启用了可为空上下文。 变量正在解析为可为空的类型

  • 其中是函数的泛型参数。 在此上下文中是什么意思,它在哪里被记录?