이 예에서는 C 함수를 호출하고 값 0을 전달합니다. 그러나 결과를 인쇄 할 때 예상 1이 아닌 0을 얻습니다. 이것은 함수의 입력 매개 변수로 선언되기 때문입니다. 반환 명령문이 실행되면 연기 함수가 호출되지만 증분은 리턴 값에 영향을 미치지 않습니다.
여기서는 C1 함수의 결과 매개 변수로 선언됩니다. 반환 명령문이 실행되면 i의 값이 리턴 값으로 설정됩니다. 그러나 연기 함수는 여전히 반환되기 전에 i의 값을 수정할 수 있습니다. 이로 인해 출력이 1이됩니다.
func c(i int) int { defer func() { i }() return i } func main() { fmt.Println(c(0)) // Prints 0 }명시 적 반품 및 지연된 수정
이 동작을 추가로 설명하기 위해 다른 예를 추가하겠습니다.
이 예에서는 리턴 명령문이 연기 함수가 호출되기 전에 명시 적으로 i를 2로 설정합니다. 결과적으로, 연기 함수는 i의 값을 증가시키고 반환 값은 3이됩니다.
func c(i int) int { defer func() { i }() return i } func main() { fmt.Println(c(0)) // Prints 0 }명명 된 결과 매개 변수
이 예제의 주요 테이크 아웃의 힘은 입력 매개 변수와 명명 된 결과 매개 변수 간의 구별입니다. 입력 매개 변수는 함수로 전달되는 반면, 이름이 지정된 결과 매개 변수는 함수의 리턴 값을 보유하는 변수입니다. DEFER 기능은 반환 문이 실행 된 후 명명 된 결과 매개 변수를 수정할 수 있지만 입력 매개 변수에 영향을 줄 수는 없습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3