【发布时间】:2015-11-03 03:36:40
【问题描述】:
我知道 Go 没有任何构造函数,并且使用 New func 代替它,但根据 this example。
func NewFile(fd int, name string) *File {
if fd < 0 {
return nil
}
f := File{fd, name, nil, 0}
return &f
}
他们总是返回&f。为什么仅仅返回File 是不够的?
更新
我已经尝试为一个简单的结构返回创建的对象,这很好。所以,我想知道返回地址是否是构造函数或其他东西的标准方式。
谢谢。
【问题讨论】:
-
函数返回一个
File*,所以不能“直接”返回File。在前面的例子中,new(File)用于以File*开头。 -
所以,除非我使用文件,否则我不必将地址返回给变量,对吧?
-
两个例子都使用“文件”..我不知道如何解释这个问题。
-
在go中,返回一个变量的地址和C中调用
malloc()是一样的,如果不需要就不用了。 -
没有关于语言要求函数返回指针,这是定义函数的人做出的选择。您的问题只是概括为“我什么时候应该使用指针,什么时候应该使用普通结构?”的问题。答案是“视情况而定”。您可以在 Internet 上进行一些研究,了解人们通常何时选择在 Go 中使用指针。
标签: pointers go constructor