没有办法强制调用Close()方法.您可以做的最好的事情是清楚地记录,如果不再需要您的类型的值,则Close()必须调用其方法.
在程序被强制终止的极端情况下,您无法保证任何代码都会运行.
请注意,有一个runtime.SetFinalizer()函数允许您注册一个函数,当垃圾收集器找到值/块无法访问时将调用该函数.但是要知道,无法保证在程序退出之前运行您的注册功能.引用其文档:
无法保证终结器将在程序退出之前运行,因此通常它们仅用于在长时间运行的程序期间释放与对象关联的非内存资源.
一个好的设计是使你的类型取消导出,但提供一个导出的构造函数,就像NewMyType()你可以正确初始化你的结构/类型.还返回接口类型而不是具体类型,接口应包含其他人想要对您的值执行的所有操作.您的具体类型当然必须实现该接口.你不能强迫别人Close()在完成你的价值时调用它的方法,但至少你可以不用担心不正确的初始化.