>  기사  >  백엔드 개발  >  Go에서 함수 호출 유형을 정의할 수 있나요?

Go에서 함수 호출 유형을 정의할 수 있나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-01 11:49:02526검색

Can You Define a Type for Function Calls in Go?

Go에서 함수 호출 유형을 정의할 수 있나요?

go와 같은 Go 키워드와 함수 호출을 매개변수로 연기합니다. 함수가 함수 대신 인수로 함수 호출을 수신할 수 있도록 동일한 목적을 수행할 수 있는 전용 유형이 있습니까?

함수 호출에 대한 직접 유형이 없습니다

안타깝게도 이러한 유형이 없습니다. 가다. 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: myFunc in this example
}</code>

자동 매개변수 저장 모방

경우에 따라 함수 호출에 대한 매개변수 자동 저장이 바람직할 수도 있습니다. 특정 함수 유형의 경우 매개변수 없는 함수를 반환하는 동일한 시그니처를 가진 도우미 함수를 도입하여 이를 달성할 수 있습니다. 이러한 클로저는 저장된 매개변수로 원래 함수를 호출합니다.

리플렉션을 사용하여 함수 전달

리플렉션을 사용하면 수동 매개변수 복사를 피할 수 있습니다. 그러나 함수를 호출하지 않고 전달하므로 프로세스 속도가 느려집니다.

단일 예외: 메서드 값

메서드를 사용할 때 예외가 있습니다. 메서드 값은 수신기의 복사본을 저장할 수 있으므로 메서드 호출에 대한 자동 매개변수 저장이 가능합니다.

<code class="go">type myParams struct {
    format string
    i int
    s string
}

func (mp myParams) Call() {
    fmt.Printf(mp.format, mp.i, mp.s)
}

func main() {
    p := myParams{format: "%d %q\n", i: 1, s: "Hello, playground"}
    launch(p.Call) // p is saved here
    p.i, p.s = 2, "changed"

    time.Sleep(time.Second)
}</code>

참고: 이러한 접근 방식 중 어느 것도 원하는 기능과 정확히 일치하는 방법을 제공하지 않습니다. 매개변수가 변경될 수 있는 경우 매개변수를 저장하는 도우미에게 함수를 전달하기 전에 수동 복사가 필요합니다.

위 내용은 Go에서 함수 호출 유형을 정의할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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