> 백엔드 개발 > Golang > Go의 'defer' 문은 변수 선언에 따른 반환 값에 어떻게 영향을 미치나요?

Go의 'defer' 문은 변수 선언에 따른 반환 값에 어떻게 영향을 미치나요?

Susan Sarandon
풀어 주다: 2024-11-25 03:07:14
원래의
447명이 탐색했습니다.

How Do Go's `defer` Statements Affect Return Values Based on Variable Declarations?

Go의 Defer 및 반환 값 이해: 변수 선언에 따라 결과가 다른 이유

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿