如何确保在golang中创建对象后使用方法?

时间:2016-04-24 17:02:17

标签: object methods go struct

我有一个struct,我编写了一个new方法,它生成对象并返回其指针。

现在我还有另一个方法,例如Close,但是到目前为止,创建对象后不必调用此方法。我想确保在创建对象时必须调用此方法。我怎么在Golang做到这一点?如果可以的话,我也不知道这被称为是什么。请帮忙。谢谢。

2 个答案:

答案 0 :(得分:5)

无法强制调用Close()方法。您可以做的最好的事情是清楚地记录,如果不再需要您的类型的值,则必须调用其Close()方法。

在程序被强行终止的极端情况下,您无法保证任何代码都会运行。

请注意,有一个runtime.SetFinalizer()函数允许您注册一个函数,当垃圾收集器找到值/块无法访问时将调用该函数。但是要知道,无法保证在程序退出之前运行您的注册功能。引用其文档:

  

无法保证终结器在程序退出之前运行,因此通常它们仅用于在长时间运行的程序中释放与对象关联的非内存资源。

一个好的设计是使你的类型不被导出,但提供一个导出的构造函数,如NewMyType(),你可以在其中正确初始化你的结构/类型。还返回接口类型而不是具体类型,接口应包含其他人想要对您的值执行的所有操作。您的具体类型当然必须实现该接口。你不能强迫别人在完成你的价值时调用它的Close()方法,但至少你可以不用担心不正确的初始化。

答案 1 :(得分:1)

简而言之,这是不可能的。

你正在寻找的术语是析构函数,Go没有实现。有关更多信息,请阅读以下优秀答案:enter image description here