Close()
メソッドを強制的に呼び出す方法はありません。あなたのタイプの値がもう必要でない場合は、そのメソッドClose()
を呼び出さなければならないことを明確に文書化することが最善の方法です。
プログラムが強制終了される極端な状況では、コードが実行される保証はありません。
runtime.SetFinalizer()
関数があります。ガベージコレクタが値/ブロックに到達できないことが検出されたときに呼び出される関数を登録することができます。しかし、プログラムが終了する前に登録された機能が実行されるという保証はありません。その文書から引用する:
プログラムが終了する前にファイナライザが実行されるという保証はないため、通常、長期実行プログラム中にオブジェクトに関連付けられた非メモリリソースを解放する場合にのみ有効です。
あなたのタイプを非エクスポートにすることですが、NewMyType()
のようなエクスポートされたコンストラクタ関数を提供して、構造体/タイプを適切に初期化することができます。また、具体的な型ではなく、インターフェイスの種類を返します。インターフェイスには、他のユーザーがあなたの値を使ってやりたいことがすべて含まれている必要があります。そして、あなたの具体的なタイプはもちろん、そのインターフェイスを実装する必要があります。値を入力して他の人にClose()
メソッドを呼び出させることはできませんが、少なくとも不適切な初期化を心配する必要はありません。
ありがとうございます。デストラクタだけでなく、 'object.run()'のようないくつかの変数を設定するメソッドがあり、オブジェクトが何らかのnilpointerエラーをスローすることができない場合、 '.run() 'メソッド? – scott
@scott編集された回答を参照してください。 – icza
完璧な@icza、ありがとう。 – scott