>백엔드 개발 >Golang >Go에서 `defer` 문은 변수 선언을 기반으로 한 반환 값에 어떻게 영향을 줍니까?

Go에서 `defer` 문은 변수 선언을 기반으로 한 반환 값에 어떻게 영향을 줍니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-05 22:09:18302검색

How Do `defer` Statements Affect Return Values in Go Based on Variable Declaration?

defer를 사용하여 Golang의 기능 수정 이해

Golang에서 defer를 사용하면 개발자가 함수 종료 후 실행할 함수를 설정하여 게시를 활성화할 수 있습니다. -실행 정리. 그러나 동일한 함수 내에서 다른 방식으로 선언된 변수 값을 수정하려고 하면 문제가 발생할 수 있습니다.

다음 코드 예제를 고려하세요.

func c(i int) int {
    defer func() { i++ }()
    return i
}

func c1() (i int) {
    defer func() { i++ }()
    return i
}

func c2() (i int) {
    defer func() { i++ }()
    return 2
}

c(0)에서 i로 인해 입력 매개변수이므로 반환된 값은 지연된 증분의 영향을 받지 않으므로 인쇄 출력은 0이 됩니다.

c1()에서 i 지연된 함수 실행 전에 반환 값이 명시적으로 할당되는 명명된 결과 매개 변수입니다. 따라서 지연된 증분은 반환된 값에 영향을 미치고 1의 출력을 제공합니다.

그러나 c2()에서는 i가 명시적으로 2로 반환되더라도 지연된 증분은 결과 매개 변수를 수정하여 반환을 초래합니다. 3의 값.

사양에서는 이 동작을 명확히 설명합니다.

반환 문:
A 결과를 지정하는 "return" 문은 지연된 함수가 실행되기 전에 결과 매개 변수를 설정합니다.

이름이 지정된 결과 매개 변수가 있는 함수의 경우 반환된 값은 항상 해당 변수의 값이지만 return 문은 새 값을 할당할 수 있습니다. 이 매개변수. 지연된 함수는 return 문 이후에 이러한 매개 변수를 추가로 수정할 수 있습니다.

이 원칙은 함수와 메서드 모두에 적용됩니다. 여기서 지연된 함수는 명명된 결과 매개 변수가 반환되기 전에 액세스하고 수정할 수 있습니다. 따라서 변수 선언 및 지연된 함수 수정이 최종 반환 값에 어떤 영향을 미치는지 고려하는 것이 중요합니다.

위 내용은 Go에서 `defer` 문은 변수 선언을 기반으로 한 반환 값에 어떻게 영향을 줍니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.