一尘不染

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

go

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

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


阅读 343

收藏
2020-07-02

共1个答案

一尘不染

无法强制调用Close()方法。最好的办法就是清楚地记录下来,如果不再需要类型的值,则Close()必须调用其方法。

在极端情况下,如果程序被强制终止,则不能保证任何代码都会运行。

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

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

一个好的设计是使您的类型不导出,但是提供一个导出的构造函数,例如NewMyType(),您可以在其中正确地初始化struct
/类型。还返回接口类型而不是具体类型,并且该接口应包含其他人希望对您的值进行的操作。当然,您的具体类型必须实现该接口。Close()当值完成后,您不能强迫其他人调用它的方法,但是至少您可以停止担心初始化不当。

2020-07-02