Go의 함수 래퍼: 함수 실행에 코드 삽입
함수 래퍼를 만들면 개발자는 함수 전후에 코드를 삽입하여 기존 기능을 향상시킬 수 있습니다. 실행. Go에서 이 기술을 사용하려면 래핑되는 함수의 시그니처를 알아야 하며 동일한 유형의 함수 값을 반환해야 합니다.
다음 예에서는 함수 f를 허용하는 래퍼 함수 랩을 정의합니다. 랩으로 포장된 새 함수를 반환합니다. 이 새로운 함수는 f와 동일한 서명을 갖습니다. f를 실행하기 전후에 Wrap은 메시지를 콘솔에 인쇄합니다.
func wrap(f func(i int) int) func(i int) int { return func(i int) (ret int) { fmt.Println("Before, i =", i) ret = f(i) fmt.Println("After, ret =", ret) return } }
이를 설명하기 위해 입력 수를 두 배로 늘리는 myfunc라는 함수가 있습니다.
func myfunc(i int) int { fmt.Println("myfunc called with", i) return i * 2 }
myfunc을 Wrap 함수로 래핑하여 우리 자신의 것을 추가할 수 있습니다.
wf := wrap(myfunc) ret := wf(2) fmt.Println("Returned:", ret)
출력:
Before, i = 2 myfunc called with 2 After, ret = 4 Returned: 4
여러 함수 유형 지원
Go에는 제네릭이 없기 때문에 특정 래퍼 함수를 만들어야 합니다. 지원되는 각 기능 유형에 대해 대안으로, Reflect.MakeFunc()를 사용하여 여러 함수 유형을 처리하도록 래퍼 함수를 작성할 수 있지만 이 접근 방식은 복잡할 수 있습니다.
매개변수나 반환 값이 없는 함수의 경우 랩 함수를 약간 수정할 수 있습니다.
func wrap(f interface{}) interface{} { switch f2 := f.(type) { case func(i int) (ret int): // ... case func(): // ... } return nil }
결론적으로 Go의 함수 래퍼는 소스 코드를 변경하지 않고도 기존 함수의 동작을 수정할 수 있는 수단을 제공합니다. 개발자는 특정 요구 사항을 충족하고 코드 유연성을 향상시키기 위해 이러한 래퍼를 사용자 정의할 수 있습니다.
위 내용은 Go의 함수 래퍼는 함수 실행 전후에 어떻게 코드를 삽입할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!