인터페이스 구현 함수
Go에서 인터페이스는 유형이 구현해야 하는 메서드 집합을 정의합니다. 유형은 인터페이스에서 선언된 모든 메소드를 제공하는 경우 인터페이스를 구현합니다.
예 1: 인터페이스 직접 구현
다음 코드는 핸들러 인터페이스와 이를 구현하는 유형:
type Handler interface { ServeHTTP(*Conn, *Request) } type Counter int func (ctr *Counter) ServeHTTP(c *http.Conn, req *http.Request) { fmt.Fprintf(c, "counter = %d\n", ctr) ctr++ }
여기서 Counter 유형에는 Handler 인터페이스에 필요한 인수를 취하는 ServeHTTP 메소드가 있습니다. 따라서 Counter는 Handler 인터페이스를 구현합니다.
예제 2: 함수를 사용하여 인터페이스 구현
이 예에서 notFound라는 함수는 유효한 Handler 유형이 아닙니다. 필요한 메소드가 없습니다.
func notFound(c *Conn, req *Request) { // Not a valid Handler }
notFound가 핸들러 인터페이스를 구현하도록 하려면 다음 형식으로 "finagled"해야 합니다.
// Define a type that implements ServeHTTP type HandlerFunc func(*Conn, *Request) func (f HandlerFunc) ServeHTTP(c *Conn, req *Request) { f(c, req) // Function call with arguments } // Convert function to implement the interface var Handle404 = HandlerFunc(notFound)
여기서 HandlerFunc 두 개의 인수를 취하고 아무것도 반환하지 않는 유형입니다. HandlerFunc 내에서 notFound를 래핑하고 변수에 할당하면 notFound가 유효한 핸들러 유형이 됩니다.
설명
여기서 핵심 개념은 Handle404 변수를 사용할 수 있다는 것입니다. 실제로는 함수임에도 불구하고 핸들러로 사용됩니다. 이는 HandlerFunc 유형이 함수에 대해 ServeHTTP 메소드를 구현하기 때문입니다. Handle404.ServeHTTP를 호출하면 실제로는 notFound 함수를 호출하는 것입니다.
이 접근 방식을 사용하면 Handler 인터페이스를 직접 구현하지 않는 함수를 함께 사용할 수 있습니다. 이는 본질적으로 인터페이스 요구 사항에 맞게 기능을 "적응"하는 방법입니다.
위 내용은 Go에서 인터페이스를 구현하기 위해 함수를 어떻게 적용할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!