Go에서 인터페이스를 구현하는 함수
Go에서 인터페이스는 유형이 해당 구성원으로 간주되기 위해 구현해야 하는 메소드 세트를 정의합니다. 인터페이스. 이는 동일한 인터페이스를 구현하는 유형이 코드에서 상호 교환적으로 사용될 수 있으므로 다형성 동작을 허용합니다.
예 1: 사용자 정의 유형 구현 인터페이스
다음 인터페이스를 고려하세요. HTTP 핸들러:
type Handler interface { ServeHTTP(*Conn, *Request) }
다음 유형인 Counter는 ServeHTTP의 사용자 정의 구현을 제공하여 이 인터페이스를 구현합니다.
type Counter int func (ctr *Counter) ServeHTTP(c *Conn, req *Request) { fmt.Fprintf(c, "counter = %d\n", ctr) ctr++ }
예 2: 함수를 핸들러로 변환
다음 함수인 notFound는 Handler 인터페이스를 직접 구현하지 않습니다.
func notFound(c *Conn, req *Request) { c.SetHeader("Content-Type", "text/plain;", "charset=utf-8") c.WriteHeader(StatusNotFound) c.WriteString("404 page not found\n") }
이 함수가 Handler 인터페이스와 호환되도록 하기 위해 Go에서는 함수를 특정 방법으로 입력하세요. 이 경우 HandlerFunc 유형이 정의됩니다.
type HandlerFunc func(*Conn, *Request)
ServeHTTP라는 메서드가 이 유형에 추가됩니다.
func (f HandlerFunc) ServeHTTP(c *Conn, req *Request) { f(c, req) }
이제 notFound 함수를 다음 인스턴스로 변환할 수 있습니다. HandlerFunc 및 변수에 할당:
var Handle404 = HandlerFunc(notFound)
이렇게 하면 notFound 함수 자체가 핸들러 인터페이스를 직접 구현하지 않더라도 Handle404를 핸들러로 사용할 수 있습니다.
설명
요약하자면 Go에서는 함수가 인터페이스 요구 사항을 직접적으로 충족하지 못하는 상황을 해결하면서 특정 메서드를 사용하여 함수를 유형으로 변환할 수 있습니다. 함수에서 유형 인스턴스를 생성하고 해당 유형에 대한 메서드를 정의하면 인터페이스에서 함수를 수용할 수 있어 프로그램에서 다형성 동작이 가능해집니다.
위 내용은 Go에서 인터페이스를 구현하는 데 함수를 어떻게 사용할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!