Go でインターフェイスを実装するために関数をどのように使用できますか?

Mary-Kate Olsen
リリース: 2024-11-06 12:53:02
オリジナル
379 人が閲覧しました

How can functions be used to implement interfaces in Go?

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 関数自体が Handler インターフェイスを直接実装していない場合でも、Handle404 をハンドラーとして使用できるようになります。

要約すると、Go では、関数がインターフェイスの要件を直接満たさない状況に対処するために、関数を特定のメソッドで型に変換できます。関数から型インスタンスを作成し、その型でメソッドを定義することにより、関数をインターフェイスに対応させることができ、プログラム内でポリモーフィックな動作が可能になります。

以上がGo でインターフェイスを実装するために関数をどのように使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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