Go에서 함수 호출과 유사한 동작 달성
Go에서 go 및 defer와 같은 키워드는 함수가 매개변수로 전달될 것으로 예상합니다. 그러나 실제 함수 호출을 전달하는 것을 방지하는 제한 사항이 있습니다.
답변:
안타깝게도 함수 호출을 인수로 모방할 수 있는 직접 유형은 없습니다. go 및 defer는 언어 사양이 지원하는 구문 구조이며 컴파일러는 이 동작을 강제합니다.
대체 접근 방식: 함수 값 사용
이 제한을 우회하려면 다음을 수행하세요. 함수 값을 사용하십시오. 함수 값은 함수 유형의 변수 또는 값입니다. 나중에 또는 필요할 때 언제든지 함수 값을 호출할 수 있습니다.
<code class="go">func myFunc() { fmt.Println("hi") } func main() { var f func() f = myFunc f() // This calls the function value stored in f, which is myFunc in this case }</code>
자동 매개변수 저장 에뮬레이션
댓글에서 자동 매개변수 저장에 대한 욕구를 언급하셨습니다. . 저장된 매개변수와 함께 래핑된 함수를 제공하는 도우미 함수를 사용하여 이를 달성할 수 있는 방법은 다음과 같습니다.
<code class="go">func wrapPrintln(s string) func() { return func() { fmt.Println(s) } } func launch(f func()) { fmt.Println("Before launch") go func() { defer fmt.Println("After completion") f() }() } func main() { s := "Hello, playground" launch(wrapPrintln(s)) }</code>
옵션으로서의 반사
반사도 처리하기 위한 또 다른 접근 방식입니다. 이 시나리오에는 함수를 인터페이스로 전달하고 리플렉션을 사용하여 호출하는 작업이 포함됩니다. 이 접근 방식은 함수 값을 사용하는 것보다 효율성이 떨어지지만 다양한 시그니처를 사용하여 함수를 처리할 수 있습니다.
결론적으로 함수 호출을 인수로 전달하거나 함수 값을 사용하거나 도우미를 통해 매개 변수 저장을 흉내내는 직접적인 방법은 없습니다. 함수는 유사한 동작을 달성하기 위한 해결 방법을 제공합니다.
위 내용은 Go에서 함수 호출을 인수로 전달할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!