【发布时间】:2017-07-20 11:57:33
【问题描述】:
我正在用 go 编写一个包来创建与 Kafka 的连接。
我在包的主文件中的init() 函数中创建连接。使用该包的程序停止后,我想调用一个名为Close()的函数
有没有办法在包级别强制执行,而不是将这个责任交给用户?
假设连接应该在用户程序的整个运行过程中都可用,我不想每次都初始化它。
【问题讨论】:
-
你不能强制执行这样的事情。您可以利用
runtime.SetFinalizer(),但它不能为您提供保证。查看相关问题:How to make sure that a method is used after an object is created in golang? -
您还应该避免使用
SetFinalizer(),尤其是在 Go 1.8 中,因为在某些情况下,它可能会被提前调用。 -
正确记录您的包裹。清理之类的事情是用户的责任。包尝试处理幕后的事情越多,从长远来看,它就越有可能给用户带来问题。
标签: go