Golang は、もともと Google によって設計および開発された静的型付けのコンパイル言語であり、大規模なプロジェクトの処理に優れています。 Golang のインターフェイスは、型間の相互運用性を可能にし、ポリモーフィズムをサポートする重要な概念です。
Golang では、インターフェイスはオブジェクトの動作を定義する抽象型です。インターフェイスは、特定の実装を持たないメソッド シグネチャのセットで構成されます。これらのメソッド シグネチャを実装することにより、型はインターフェイスの要件を満たします。インターフェイスによって定義されたすべてのメソッドを実装している限り、どの型でもインターフェイスを実装しているとみなされます。
インターフェイスの定義では、type
キーワードに続いてインターフェイス名とメソッド シグネチャを使用します。例:
type Shaper interface { Area() float64 Perimeter() float64 }
上記のコードは、Area()
と Perimeter()
という 2 つのメソッドを持つインターフェイス Shaper
を定義します。値は float64
型です。
インターフェースを実装するには、インターフェースに定義されているすべてのメソッドを実装するだけです。以下は、インターフェイスの実装を示す簡単な例です。
package main import ( "fmt" ) type Rectangle struct { width, height float64 } func (r Rectangle) Area() float64 { return r.width * r.height } func (r Rectangle) Perimeter() float64 { return 2 * (r.width + r.height) } func main() { var s Shaper r := Rectangle{width: 5, height: 3} s = r fmt.Println("Area:", s.Area()) fmt.Println("Perimeter:", s.Perimeter()) }
上記のコードでは、Rectangle
構造体が定義され、Area()
が実装されています。 Perimeter()
メソッド。 Rectangle
型をインターフェイス変数 s
に代入することで、インターフェイスが実装されます。
空のインターフェイスとは、メソッド シグネチャのないインターフェイスを指し、Java の Object
に相当します。 Golang では、空のインターフェイスは任意の型を表すことができます。以下は空のインターフェイスの例です。
package main import "fmt" func describe(i interface{}) { fmt.Printf("(%v, %T) ", i, i) } func main() { var i interface{} describe(42) describe("hello") describe([]int{1, 2, 3}) describe(struct{ name string }{"Alice"}) i = 3.14 fmt.Println(i) }
上記のコードでは、describe
関数は空のインターフェイス タイプのパラメータを受け取り、パラメータの値とタイプを出力します。 main
関数で describe
関数を呼び出して、さまざまなタイプのパラメーターを渡します。
Golang のインターフェイスはネストをサポートしており、他のインターフェイスや構造に埋め込むことができます。ネストされたインターフェイスにより、コードをよりモジュール化して柔軟にすることができます。以下は、ネストされたインターフェイスを使用したサンプル コードです。
package main import "fmt" type Reader interface { Read() } type Writer interface { Write() } type ReadWriter interface { Reader Writer } type File struct{} func (f File) Read() { fmt.Println("Reading file") } func (f File) Write() { fmt.Println("Writing file") } func main() { var rw ReadWriter f := File{} rw = f rw.Read() rw.Write() }
上記のコードは、3 つのインターフェイス Reader
、Writer
、および ReadWriter
を定義します。 #ReadWriter インターフェイスは、
Reader インターフェイスと
Writer インターフェイスをネストします。
File 構造体は、
Read() メソッドと
Write() メソッドを実装し、
ReadWriter インターフェイスも実装します。
以上がGolangインターフェースの実装方法と事例分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。