defer는 명명된 반환 값과 어떻게 상호 작용합니까?
Go에서 defer 키워드는 주변 함수가 반환될 때까지 함수 실행을 연기합니다. . 명명된 반환 값의 맥락에서 이 동작을 통해 지연된 함수는 최종적으로 반환될 값을 수정할 수 있습니다.
다음 예를 고려하세요.
func c() (i int) { defer func() { i++ }() return 1 }
이 예에서 기본 함수는 1을 반환합니다. 그러나 지연된 함수는 기본 함수가 반환되기 전에 명명된 반환 값 i를 1씩 증가시킵니다. 결과적으로 메인 함수의 실제 반환 값은 2입니다.
이러한 동작은 Go에서 인수가 있는 return 문이 반환하기 전에 명명된 반환 변수에 효과적으로 값을 할당하기 때문에 가능합니다. 따라서 return 1 문은 다음과 동일합니다.
i = 1 return
결과적으로 지연된 함수는 명명된 반환 값 i에 할당하고 주변 함수의 반환 값을 수정할 수 있습니다.
defer문의 순서가 중요하다는 점에 유의하는 것이 중요합니다. 지연된 함수는 LIFO(후입선출) 순서로 실행됩니다. 이는 주변 함수가 반환된 후 가장 최근에 지연된 함수가 먼저 실행된다는 의미입니다.
이 작동 방식을 더 잘 이해하려면 다음 수정된 예를 고려하세요.
func c() (i int) { defer func() { fmt.Println("third") }() defer func() { i = 2 }() defer func() { fmt.Println("first") }() fmt.Println("second") return 1 }
이 예에서는 실행 순서는 다음과 같습니다:
지연 함수 i를 2로 설정하는 것은 함수가 반환되기 전에 실행되므로 반환 값은 2입니다. fmt.Println 문은 역방향으로 실행됩니다. 지연의 LIFO 동작으로 인해 주문이 발생합니다.
위 내용은 Go에서 'defer' 문은 명명된 반환 값에 어떻게 영향을 미치나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!