インターフェイスを実装する関数
Go では、インターフェイスは、型が実装する必要があるメソッドのセットを定義します。インターフェイスで宣言されたすべてのメソッドを型が提供する場合、その型はインターフェイスを実装します。
例 1: インターフェイスを直接実装する
次のコードは、Handler インターフェイスとそれを実装する型:
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 はハンドラー インターフェイスを実装します。
例 2: 関数を使用したインターフェイスの実装
この例では、notFound という関数は有効なハンドラー タイプではありません。必要なメソッドがありません:
func notFound(c *Conn, req *Request) { // Not a valid Handler }
notFound に Handler インターフェイスを実装するには、次の形式に「仕上げる」必要があります:
// 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は 2 つの引数を受け取り、何も返しません。 notFound を HandlerFunc 内でラップし、変数に代入すると、notFound は有効な Handler 型になります。
説明
ここでの重要な概念は、変数 Handle404 が使用できるということです。実際には関数であっても、ハンドラーとして。これは、HandlerFunc タイプが関数の ServeHTTP メソッドを実装しているためです。 Handle404.ServeHTTP を呼び出すと、実際には notFound 関数が呼び出されます。
このアプローチにより、Handler インターフェイスを直接実装していない関数を使用できるようになります。これは本質的に、インターフェースの要件に合わせて関数を「適応」させる方法です。
以上がGo でインターフェイスを実装するために関数をどのように適応させることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。