ホームページ  >  記事  >  バックエンド開発  >  golang でインターフェイスを作成および設定する方法 (メソッドの簡単な分析)

golang でインターフェイスを作成および設定する方法 (メソッドの簡単な分析)

PHPz
PHPzオリジナル
2023-04-13 18:34:221135ブラウズ

Golang では、インターフェイスはオブジェクトの動作を記述する型であり、インターフェイスを定義することで、オブジェクトの機能や対話方法を標準化し、異なる種類のオブジェクトの対話を容易にすることができます。

Golang では、インターフェイスのメソッド セットはメソッド定義のセットで構成されており、インターフェイスを実装する型はインターフェイスのすべてのメソッドを実装する必要があります。ただし、インターフェイスを実装する場合、明示的にインターフェイスの実装を宣言する必要はなく、クラスの継承やインターフェイスの実装も必要なく、インターフェイスのメソッドセットを実装するだけで済みます。インターフェースは動的ディスパッチの形式で実装されており、優れた柔軟性とスケーラビリティを備えています。

それでは、Golang でインターフェイスを作成および設定するにはどうすればよいでしょうか?次に以下の観点から紹介していきます。

  1. インターフェイスの定義

まず、インターフェイスを定義し、type キーワードをインターフェイスに追加してインターフェイスの種類を定義し、インターフェイスのメソッド セットを定義する必要があります。例:

type MyInterface interface {
    Method1() string
    Method2() int
}

上記のコードは、2 つのメソッド Method1 と Method2 を含む MyInterface という名前のインターフェイス タイプを定義します。インターフェイスで定義されたメソッドには特定の実装本体がなく、メソッド名と戻り値の型のみがあることに注意してください。

  1. インターフェイスの実装

次に、インターフェイス メソッド セットを実装する構造体タイプを定義してインターフェイスを実装する必要があります。例:

type MyStruct struct{}

func (m MyStruct) Method1() string{
    return "Method1 is called."
}

func (m MyStruct) Method2() int{
    return 100
}

上記のコードは、MyInterface インターフェイスの 2 つのメソッド Method1 と Method2 を実装する MyStruct という名前の構造体タイプを定義します。インターフェースを実装するメソッドがインターフェースの実装として認識されるためには、インターフェースで定義されているものとまったく同じメソッド名、パラメータリスト、戻り値の型を使用する必要があることに注意してください。この例では、MyStruct 型に設定されたメソッドは、MyInterface のメソッド セットも実装します。つまり、MyInterface インターフェイスが実装されます。

  1. インターフェースの使用

インターフェースの使用は、Golang のインターフェースに関する最も基本的な操作であり、インターフェース型の変数を定義することで、これにさまざまな値を割り当てることができます。

var i MyInterface
i = MyStruct{}

fmt.Println(i.Method1())
fmt.Println(i.Method2())

上記のコードは、MyInterfce 型の変数 i を定義し、それに MyStruct 型の変数を割り当てます。 MyStruct 型は MyInterface インターフェイスを実装しているため、MyInterface で定義されているすべてのメソッドにアクセスできます。出力結果は次のとおりです:

Method1 is called.
100

MyStruct 型の変数を MyInterface i 型の変数に割り当てる場合に注意してください。 、実際には、MyStruct 型の値のコピーを MyInterface 型変数 i に割り当てます。これは、C の仮想関数の実装に似ています。したがって、ポインタ型を使用してインターフェイスを実装する場合は注意してください。ポインタ型変数が指すオブジェクトが変更されると、インターフェイス実装の可用性に影響を与える可能性があるためです。

  1. インターフェイスのネスト

Golang では、インターフェイスはネスト、つまり、インターフェイス内のメソッド セットとして他のインターフェイス タイプをネストすることもサポートしています。例:

type MyInterface1 interface {
    Method1() string
}

type MyInterface2 interface {
    MyInterface1
    Method2() int
}

type MyStruct struct{}

func (m MyStruct) Method1() string{
    return "Method1 is called."
}

func (m MyStruct) Method2() int{
    return 100
}

func main() {
    var i MyInterface2
    i = MyStruct{}

    fmt.Println(i.Method1())
    fmt.Println(i.Method2())
}

上記のコードは、入れ子になった MyInterface1 インターフェイスを定義し、MyInterface1 インターフェイスと MyInterface2 インターフェイスのメソッドを実装する MyInterface2 インターフェイスを定義します。 MyStruct 型はこれら 2 つのインターフェイスも実装しているため、i メソッドと call メソッドに割り当てることができます。

  1. 空のインターフェイス

Golang では、オブジェクトの特定の型が分からないが、それを操作したい場合でも、インターフェイスを使用できます。それを完了するために。これは空のインターフェイスの概念です。空のインターフェイスは Golang の特別な型です。そのメソッド セットは空で、あらゆる種類のオブジェクトを表すことができます。例:

var i interface{}
i = 1

fmt.Println(i)

上記のコードは、interface{} 型の変数 i を定義し、それに整数 1 を割り当てます。 Interface{} タイプは任意のタイプのオブジェクトを表すことができるため、i の値を出力して正しい結果を得ることができます。

上記は Golang でインターフェイスを作成および設定するための基本的な方法です。インターフェイスの使用をマスターすると、コードの柔軟性と拡張性が向上し、プログラムの可読性と保守性が向上します。

以上がgolang でインターフェイスを作成および設定する方法 (メソッドの簡単な分析)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。