2017-07-27 40 views

回答

1

有幾個原因,您可能希望這樣的內部函數,但到目前爲止最常見的用途是當你需要在內部函數中使用本地變量從包含的功能。爲什麼內在的功能呢?有時您需要將它傳遞到庫中,或者您需要它來獲取godefer語句。

內部函數「關閉」它使用的來自外部函數的任何變量,並且這些變量即使在外部函數返回後仍保持有效。由於這個原因,這樣定義的函數被稱爲「閉包」。

一個常見的用途是回調等與某些庫一起使用。有時候它更容易實現你需要的功能。

另一個常見用途是如果你想使用defer代碼塊。 defer只適用於函數,並且通常需要來自外部函數的變量。通常你會看到這種情況與recover一起使用並命名爲返回值。顯然這與原因#1重疊。

最後有時你想要並行運行一個函數的一部分,所以你創建了一個閉包,並把它作爲一個go作爲goroutine調用它。

封閉當然還有其他用途...

相關問題