golangインターフェースの使い方

PHPz
リリース: 2023-04-24 10:32:49
オリジナル
515 人が閲覧しました

Golang では、インターフェイス (Interface) は、オブジェクトに必要なメソッドのセットを定義する型です。インターフェイスを使用すると、オブジェクトの具体的な実装を気にすることなく、抽象的な方法でオブジェクトを記述することができます。

インターフェースの宣言形式は以下のとおりです。

type インターフェース名interface {

方法1(参数1 类型1, 参数2 类型2, ...) (返回值1 类型1, 返回值2 类型2, ...) 方法2(参数1 类型1, 参数2 类型2, ...) (返回值1 类型1, 返回值2 类型2, ...) ...
ログイン後にコピー

}

このうちインターフェース名は任意です。法的識別子; メソッド 0 個以上のパラメータと 0 個以上の戻り値を持つことができ、パラメータと戻り値の型はインターフェイスの型を含む任意の型にすることができます。

次の簡単な例は、インターフェイスを定義し、それを使用して 2 つの異なるタイプを記述する方法を示しています。

package main

import "fmt"

// インターフェイスを定義します
type Shape インターフェイス {

Area() float64
ログイン後にコピー

}

// 構造体を定義します Circle
type Circle struct {

X, Y, Radius float64
ログイン後にコピー

}

// Shape インターフェイスを実装するメソッド Area() を定義します
func (c Circle) Area() float64 {

return 3.14 * c.Radius * c.Radius
ログイン後にコピー

}

// 構造体を定義しますRectangle
type Rectangle struct {

X1, Y1, X2, Y2 float64
ログイン後にコピー

}

// Shape インターフェイスを実装するメソッド Area() を定義します
func (r Rectangle) Area() float64 {

return (r.X2 - r.X1) * (r.Y2 - r.Y1)
ログイン後にコピー

}

// 関数 GetArea を定義します。この関数は Shape タイプのパラメーターを受け取り、その Area() メソッドを呼び出します。
func GetArea(shape Shape) float64 {

return shape.Area()
ログイン後にコピー

}

func main() {

// 创建一个 Circle 对象并计算它的面积 c := Circle{0, 0, 5} fmt.Println(GetArea(c)) // 输出:78.5 // 创建一个 Rectangle 对象并计算它的面积 r := Rectangle{0, 0, 10, 10} fmt.Println(GetArea(r)) // 输出:100 // 注意:Circle 和 Rectangle 类型都实现了 Shape 接口,因此可以作为参数传递给 GetArea 函数
ログイン後にコピー

}

上記の例では、Shape という名前のインターフェイスを定義し、2 つの異なる Type Circle と Rectangle を定義しました。これらはすべて、 Shape インターフェイスの Area() メソッド。また、Shape 型のパラメーターを受け取り、その Area() メソッドを呼び出して面積を計算する GetArea という関数も定義します。

main 関数では、Circle オブジェクトと Rectangle オブジェクトをそれぞれ作成し、それらを GetArea 関数に渡して面積を計算しました。 Circle 型と Rectangle 型はどちらも Shape インターフェイスを実装しているため、どちらもパラメータとして GetArea 関数に渡して面積を計算できます。

つまり、インターフェースは Golang において非常に重要な概念であり、これにより、オブジェクトの具体的な実装を気にすることなく、抽象的な方法でオブジェクトを記述することができます。インターフェイスの使用をマスターすることで、Golang コードをより適切に設計して作成できるようになります。

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

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