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