Go でインターフェイスを実装するために関数をどのように適応させることができますか?

Linda Hamilton
リリース: 2024-11-07 06:24:02
オリジナル
289 人が閲覧しました

How Can You Adapt a Function to Implement an Interface in Go?

インターフェイスを実装する関数

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!