在Go 中保留局部變數:C 的「靜態」的替代方案
在Go 中,與C 不同,沒有直接等價於局部變數的“static”關鍵字。但是,仍然可以透過利用閉包的概念來創建在函數呼叫之間保留其值的局部變數。
閉包來救援
Go 中的閉包是一個捕獲並共享創建它的函數的環境的函數。這包括存取閉包範圍之外定義的變數。透過利用閉包,我們可以模擬與 C 中靜態局部變數類似的行為。
Go 中的範例
考慮以下程式碼:
func main() { x := 0 func() { defer fmt.Println("x:", x) x++ }() for i := 0; i < 10; i++ { x++ } }
在這裡,我們定義了一個函數(匿名),它關閉「 main”函數中的變數“x”。這會在函數執行時捕獲“x”的當前值。
輸出:
x: 1 x: 2 x: 3 .... x: 10
如您所見,「x」的值遞增在封閉函數內,同時保持獨立於「main」函數中遞增的“x”。這實際上就像一個靜態局部變量,在函數呼叫之間保留其值。
注意:
這種方法之所以有效,是因為函數透過以下方式捕捉 'x' 的值: -引用,而不是按值。這確保了函數內對“x”所做的任何修改都會反映在封閉的範圍內。
以上是如何在 Go 中模擬 C 的「static」關鍵字作為局部變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!