>  기사  >  백엔드 개발  >  메소드 표현식은 어떻게 Go에서 메소드 전달을 인수로 활성화합니까?

메소드 표현식은 어떻게 Go에서 메소드 전달을 인수로 활성화합니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-27 11:26:13659검색

How Do Method Expressions Enable Passing Methods as Arguments in Go?

Go의 메서드 식

Go의 메서드 식을 사용하면 사용자 정의 개체를 첫 번째 인수로 사용하여 메서드를 호출할 수 있습니다. 이는 특정 작업을 함수에 전달해야 할 때 유용할 수 있습니다.

코드 조각 이해

다음 Go 코드를 고려하세요.

func main() {
    dog := Dog{}
    b := (*Dog).Bark // method expression
    b(&dog, 5)
}

type Dog struct {}

func (d *Dog) Bark(n int) {
    for i := 0; i < n; i++ {
        fmt.Println("Bark")
    }
}

이 예에서는 메소드 표현식을 사용하여 변수 b에 함수를 할당합니다. 메소드 표현식(*Dog).Bark는 Dog 유형의 Bark 메소드를 포인터 수신자(*Dog)와 연결합니다.

b가 호출되면 Bark 메소드는 dog 객체를 첫 번째 인수로 사용하여 호출됩니다. 두 번째 인수는 5입니다. 이 메서드는 "Bark"를 콘솔에 5번 인쇄합니다.

메서드 표현식의 장점

  • 메서드 표현식을 사용하면 특정 작업을 함수에 전달할 수 있습니다. 객체가 컴파일 타임에 알려지지 않은 경우.
  • 다른 객체와 함께 사용할 수 있는 사용자 정의 함수 유형을 생성하는 방법을 제공합니다. 고차 함수.

사용 예

메서드 표현식은 다양한 상황에서 사용할 수 있습니다. 예를 들어, 메소드 표현식과 객체를 취한 다음 메소드에 따라 작업을 수행하는 도우미 함수를 정의할 수 있습니다.

func DoAction(f func(*Dog, int), d *Dog, n int) {
    f(d, n)
}

...

func main() {
    var b func(*Dog, int)
    if (shouldBark) {
        b = (*Dog).Bark
    } else {
        b = (*Dog).Sit
    }
    d := Dog{}
    DoAction(b, &d, 3)
}

위 내용은 메소드 표현식은 어떻게 Go에서 메소드 전달을 인수로 활성화합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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