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

在Go中声明带有“ var”的新结构实例与使用“ new”有何不同?

胡天佑
2023-03-14
问题内容

以下代码创建struct的可用实例Car。这与使用new(Car)有何不同?

例:

type Car struct {
  make string
}

func Main() {
  var car Car; // how is this different than "car := new(Car)"?

  car.make = "Honda"
}

问题答案:

一个定义了Car变量,另一个定义了指向Car的指针。

var car Car      // defines variable car is a Car
car2 := new(Car) // defines variable car2 is a *Car and assigns a Car to back it

car := new(Car)可以这样实现var car Car

var x Car
car := &x


 类似资料:
  • 问题内容: 如果声明变量而不使用“ var”,则变量始终变为GLOBAL。 在函数内部声明全局变量是否有用?我可以想象在某个事件处理程序中声明一些全局变量,但这有什么用呢?更好地使用RAM? 问题答案: 不,没有RAM好处或类似的好处。 w3schools谈论的是我所说的“内隐全球性恐怖” 。考虑以下功能: 看起来很简单,但是由于线路上的错字,它返回,而不是。并创建一个带有输入错误名称的全局变量:

  • 问题内容: 以下两个声明之间有什么区别? 和 是在堆栈上还是在堆上声明? 问题答案: 一个明显的区别是,一个全为零,另一个包含[1..5]。 但这是唯一的区别。两者都是5元素整数数组,都以相同的方式分配。用大括号声明不只是语法上的方便。 请注意,只有在声明数组时才能使用此形式: 但不是 要么 对象(数组是对象)在堆上分配。

  • 我试图表示一个树状递归数据结构,其中每个节点可能是两种不同数据类型中的一种。我使用boost变体来“容纳”可能出现在每个节点上的两种类型。 但是,我遇到了一个问题。我严格使用“using”指令声明所有这些类型,因此当我到达节点的递归性质时,它会失败,因为typedef/using可能不会使用递归。 如何做到这一点? 我已经探索过使用boost::make_recursive_variant,但它创

  • 我正在尝试向我的网站添加一个喜欢的功能。我使用以下模式制作了一个喜欢的集合。我正在使用自定义_id来避免创建额外的索引。 我的服务器上有一个路由,它使用MongoDB聚合搜索帖子集合。我正在尝试向当前管道中添加一个$lookup阶段,以便添加一个liked属性,该属性的类型为布尔值,表示用户是否喜欢该帖子。下面是无法工作的$查找阶段(liked始终返回空数组,即使有相应的liked文档): 我认为

  • 当我们的团队处理关于C代码中POD的单元化成员的valgrind警告时,我想到了这个有趣的答案: https://stackoverflow.com/a/5914697/629530 重申要点,考虑C中的以下POD结构: 构造C类型对象的以下调用调用默认构造函数,成员使用该默认构造函数初始化(再次复制Martin York答案中的代码和注释): 有道理。Martin York继续指出,使用以下声明

  • 在Go语言规范中,提到了对标签的简要概述: 字段声明之后可能会有一个可选的字符串文字标记,该标记将成为相应字段声明中所有字段的属性。标记通过反射界面可见,但在其他情况下被忽略。 这是一个非常简短的解释,我想知道是否有人能给我提供这些标签的用途?