Go에서 defer 문은 주변 이후에 실행될 함수를 예약하는 데 사용됩니다. 함수가 반환됩니다. 그러나 지연된 함수 내에서 변수 값에 접근하고 수정하는 경우 변수가 선언된 방식에 따라 동작이 달라질 수 있습니다.
사례 1: 변수가 들어오는 매개변수로 선언됨
다음 예를 고려해 보세요.
func c(i int) int { defer func() { i++ }() return i }
여기서 i는 수신으로 선언됩니다. 매개변수. return 문이 실행되면 반환 값이 평가되고 지연된 함수가 이후 실행됩니다. 결과적으로, 지연된 함수에서 i를 증가시키는 것은 반환 값에 영향을 미치지 않으며 c(0)은 0을 인쇄합니다.
사례 2: 결과 매개 변수로 선언된 변수
이제 다음 예를 살펴보겠습니다.
func c1() (i int) { defer func() { i++ }() return i }
이 경우 i가 선언됩니다. 결과 매개변수의 이름으로. return 문이 실행되면 i 값이 명시적으로 반환됩니다. 그런 다음 지연된 함수는 i 값을 수정할 수 있으며 이는 실제 반환 값에 영향을 미칩니다. 이것이 c1()이 1을 인쇄하는 이유입니다.
사례 3: 명시적 반환 값이 있는 결과 매개 변수
더 자세히 설명하려면 다음 예를 고려하세요.
func c2() (i int) { defer func() { i++ }() return 2 }
여기서 defer 함수가 i를 수정하더라도 명시적인 return 문은 defer 함수 이전에 i에 값 2를 할당합니다. 달린다. 결과적으로 c2()는 3을 반환합니다.
결론
Go에서 핵심 내용은 함수에 결과 매개변수라는 이름이 있는 경우 반환 값은 다음과 같다는 것입니다. 해당 변수의 값. 그러나 return 문은 이러한 결과 매개 변수에 새 값을 할당할 수 있으며, 지연된 함수는 return 문 이후에 이를 수정하여 실제 반환 값에 영향을 줄 수 있습니다.
위 내용은 Go의 'defer' 문은 변수 선언에 따른 반환 값에 어떻게 영향을 미치나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!