go return 的時候傳遞引數給defer

若-飞發表於2024-07-08

在Go語言中,defer語句用於延遲執行一個函式直到包含它的函式體執行完畢。在使用defer時,函式的引數會在defer語句執行時被計算,並且函式呼叫會被延遲執行。

如果你希望在函式返回時呼叫defer語句,並且想要傳遞一些引數給defer延遲呼叫的函式,你可以透過將這些引數先儲存在變數中,然後在defer語句中使用這些變數。這樣做確保了在函式返回之前計算和儲存了引數的值。

下面是一個簡單的示例,演示瞭如何在函式返回時傳遞引數給defer語句:

func doubleReturn(x int) (result int) {
	defer func() {
		// 在 return 之前呼叫 defer,傳遞引數 x
		result += x
	}()

	return x * 2
}

func TestDoubleReturn(t *testing.T) {
	v := doubleReturn(3)
	fmt.Println(v) // 輸出9
}

在上面的示例中,doubleReturn函式接收一個整數引數 x,並返回 x * 2 的結果。在函式體內,我們使用了defer語句來註冊一個匿名函式。這個匿名函式會在doubleReturn函式即將返回時執行。在這個匿名函式內部,我們透過閉包的方式訪問了 x 的值,並將其累加到 result 上。

因此,當 doubleReturn 函式返回時,會先執行 defer語句註冊的匿名函式,這時引數 x 的值就會被傳遞給 defer中的程式碼。

總結起來,你可以透過將引數儲存在閉包中,然後在 defer 延遲呼叫中使用這些引數,來實現在函式返回時傳遞引數給 defer

相關文章