Golang インターフェースの実装の詳細

PHPz
リリース: 2023-03-22 15:31:07
オリジナル
1490 人が閲覧しました

Golang (Go 言語とも呼ばれる) は、Google によって設計および保守されている最新のプログラミング言語です。 Golang は、強力な型指定と厳密な型チェックを通じてコードの保守性と堅牢性を向上させる静的言語です。最も興味深い機能の 1 つはインターフェイスです。この記事では、Golang インターフェイスの実装について詳しく説明します。

Golang インターフェイスとは何ですか?

C や Java などの他のオブジェクト指向プログラミング言語と同様に、Golang もインターフェイスをサポートしています。 Go では、インターフェイスはメソッドのセットの宣言であり、インターフェイス型はこれらのメソッドを実装する必要がある型のコレクションです。簡単に言うと、インターフェイスはメソッドのシグネチャを定義する抽象型ですが、実装は定義しません。インターフェイスには 0 個以上のメソッド シグネチャを含めることができますが、フィールドは含まれません。

インターフェイスはカードに例えることができます。カードには特定の使用規則が規定されているため、カード インターフェイスを実装する人はコーディングの際にこれらの規則に従う必要があることがわかり、コーディングが便利になります。パフォーマンスとコードの柔軟性改善されました。

インターフェースの実装

Golang でインターフェースを実装するのは非常に簡単です。型はインターフェース型内のすべてのメソッドを実装するだけでよく、次のようにすることができます。このインターフェイス タイプを実装タイプと呼びます。インターフェイスの定義と実装のプロセスは次のとおりです。

type interfaceName interface{
    method1(param1 type1, param2 type2, ...) (return1 type1, return2 type2, ...)
    method2(param1 type1, ...) (return1 type1, ...)
    ...
}

type myType struct {
    // myType 的一些域
}

func (t *myType) method1(param1 type1, param2 type2, ...) (return1 type1, return2 type2, ...) {
    // 方法体
}
func (t *myType) method2(param1 type1, ...) (return1 type1, ...) {
    // 方法体
}
// ...
ログイン後にコピー

上記のコードでは、いくつかのメソッドを含むインターフェイス InterfaceName を定義します。次に、いくつかのプロパティを持つ構造体 myType を定義し、interfaceName にそれぞれメソッドを実装しました。このように、myType は、interfaceName の実装タイプになります。

インターフェイスの実装は非侵入的であることに注意してください。つまり、定義された型を変更する必要はなく、実装するメソッドを定義するだけで済みます。

インターフェイス タイプと実装タイプの関係

インターフェイス タイプは複数の実装タイプを作成できます。つまり、1 つのインターフェイス タイプを複数のタイプで実装できます。以下に例を示します:

type Animal interface {
    Move() string
}

type Dog struct {}

func (d Dog) Move() string {
    return "I'm a dog, I can walk on 4 legs"
}

type Bird struct {}

func (b Bird) Move() string {
    return "I'm a bird, I can fly"
}

func main() {
    d := new(Dog)
    b := new(Bird)
    animal1 := Animal(d)
    animal2 := Animal(b)
    fmt.Println(animal1.Move())
    fmt.Println(animal2.Move())
}
ログイン後にコピー

上の例では、Animal インターフェースと 2 種類の実装 (Dog と Bird) を定義しました。次に、animal1 オブジェクトとanimal2 オブジェクトを作成しました。それらのタイプは両方とも Animal ですが、それらが指す実際のタイプはそれぞれ Dog と Bird です。最後に、main関数内でanimal1とanimal2のMove()メソッドがそれぞれ呼び出され、実際の型の動作に応じて動作モードが出力されます。

実際の型の Move() メソッドがインターフェイス型の Move() メソッドを実装していることがわかり、インターフェイスを実装している型であれば実装型と呼ぶことができます。

空のインターフェース

Golang の空のインターフェースインターフェース {} は特別なインターフェースです。メソッドを持たず、任意の型を表すことができます。これは Java と同等です。オブジェクトクラスで。パラメータを定義したり、任意の型の戻り値を定義するために使用できます。

func foo(a interface{}) {
    switch a.(type){
    case string:
        fmt.Println("this is string type")
    case int:
        fmt.Println("this is int type")
    default:
        fmt.Println("unknown type")
    }
}

func main() {
    foo("hello")
    foo(42)
    foo(3.14159)
}
ログイン後にコピー

上の例では、パラメータが空のインターフェイス型 a である foo 関数を定義しました。 switch ステートメントを使用して a の実際の型を判断し、それに応じて応答します。ご覧のとおり、空のインターフェイスは任意のタイプのパラメータを受け取ることができます。

概要

Golang インターフェースの実装は非常に簡単です。型がインターフェイス型のすべてのメソッドを実装している限り、その型はこのインターフェイス型の実装型と呼ばれます。インターフェイス タイプには複数の実装タイプを含めることができます。空のインターフェイスは、メソッドを持たず、任意の型を表すことができる特別なインターフェイスです。さらに、インターフェイスは非侵入型であるため、コード作成の柔軟性と読みやすさが大幅に向上します。

以上がGolang インターフェースの実装の詳細の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート