>  기사  >  백엔드 개발  >  Go에서 함수 호출을 인수로 전달할 수 있나요?

Go에서 함수 호출을 인수로 전달할 수 있나요?

Linda Hamilton
Linda Hamilton원래의
2024-10-29 15:43:021087검색

Can you Pass Function Calls as Arguments in Go?

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

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