2016-04-24 106 views
4

我有一個struct,我有一個new方法,我寫了,它生成對象並返回它的指針。如何確保在golang中創建對象後使用方法?

現在我還有另一種方法,例如,Close,但是到目前爲止,創建對象後不一定要調用此方法。我想確保在創建對象時必須調用此方法。我如何在Golang中做到這一點?如果這是可能的,我不知道這是什麼。請幫忙。謝謝。

回答

5

沒有辦法強制呼叫Close()方法。你所能做的最好的事情就是清楚地記錄下來,如果你的類型的價值不再需要,它的方法必須被調用。

在程序強行終止的極端情況下,您不能保證任何代碼都能運行。

請注意,有一個runtime.SetFinalizer()函數,它允許您註冊一個函數,該函數在垃圾回收器找到值/塊不可訪問時將被調用。但是要知道,在程序退出之前不能保證你的註冊函數會被運行。從其文檔引用:

無法保證終結器在程序退出前運行,因此通常它們僅用於在長時間運行的程序期間釋放與對象關聯的非內存資源。

一個好的設計是讓你的類型導出,而是提供了一個出口構造函數一樣NewMyType()在其中您可以正確初始化你的結構/類型。同時返回一個接口類型而不是一個具體的類型,接口應該包含其他人想要處理的值。當然你的具體類型必須實現那個接口。當他們完成你的價值時,你不能強迫其他人調用它的方法,但至少你可以停止擔心不正確的初始化。

+0

謝謝。不僅僅是析構函數,但是如果有一個像'object.run()'這樣的方法來設置一些變量,沒有這個方法,對象可以拋出一些nilpointer錯誤,是否有任何方法可以讓用戶使用'.run() '方法? – scott

+0

@scott查看編輯答案。 – icza

+0

完美@icza,非常感謝。 – scott

1

總之,這是不可能的。

您正在尋找的術語是Go不執行的析構函數。欲瞭解更多信息,請在此閱讀優秀的答案:Go destructors?

相關問題