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

标签 object methods go struct

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

现在我还有另一个方法,例如 Close,但截至目前,创建对象后调用此方法不是强制性的。我想确保在创建对象时必须调用此方法。我如何在 Golang 中做到这一点?如果可能的话,我也不知道这叫什么。请帮忙。谢谢。

最佳答案

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

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

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

There is no guarantee that finalizers will run before a program exits, so typically they are useful only for releasing non-memory resources associated with an object during a long-running program.

您可以选择不导出您的类型,并提供一个导出的构造函数,例如 NewMyType(),您可以在其中正确初始化您的结构/类型。你不能强制别人在他们用完你的值后调用它的 Close() 方法,但至少你可以不用担心初始化不正确。

关于object - 在golang中如何确保在创建对象后使用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36826232/

相关文章:

javascript - 如何通过索引引用对象属性?

javascript - Angular $http 发送 get 而不是 post

ruby-on-rails - ruby 对象数组...或散列

访问成员 unordered_map 中的数据时,C++ const 方法在结构中编译错误

go - gRPC - GoLang - Stackdriver 追踪器

java - 按类引用字段和按对象调用字段有什么区别?

object - 如何获取 Julia 对象的字段

javascript - 将一个函数赋值给一个数的成员,为什么不失败呢?

Go 对 ARM 寄存器 R10 和 R11 的限制

ubuntu - 运行用 Go 编写的可执行文件时找不到文件