インタフェース
理解するためのインタフェースでGolangは、我々は最初のいくつかの常識をクリアする必要があります。
- インターフェイスタイプ(任意の型)を表すことができます
- インタフェースは、メソッドの集合(すなわち、方法は一連のインタフェース)であります
- 限り、インターフェイスが実現するよう、すべての方法を、あなたはそれが(ダックタイピングと呼ばれる)は、このインタフェースを実装すると思うだろう
ダックタイピング:多形の形態(多型)は、このような形態であるにかかわらず、オブジェクトが属する何の関係なく、特定のインターフェイスのは、操作がオブジェクトに対して実行することができる限り、オブジェクトは、対応するメソッド、関数を実現するように、宣言されています。それに関係なく、オブジェクトの種類の真であり、代わりに、オブジェクトに焦点を当てることは、必要な署名及びセマンティクスを達成するための方法はありません。
「それが起動するアヒルのように歩き、それはアヒルでなければならないことを、アヒルのように聞こえる場合は。」
インタフェースは、自己充足することができない非インタフェースの他の種類によって実装されなければならない抽象メソッドのセットのコレクションであり、そして、
インターフェースは、任意のオブジェクトとして実装することができる、タイプ/オブジェクトは、インターフェースの複数を達成することができる
方法をEATように(オーバーロードすることができません)、 (sの文字列を)食べ共存できない
例:
package main
import "fmt"
type Phone interface {
call()
}
type NokiaPhone struct {
}
func (nokiaPhone NokiaPhone) call() {
fmt.Println("I am Nokia, I can call you!")
}
type ApplePhone struct {
}
func (iPhone ApplePhone) call() {
fmt.Println("I am Apple Phone, I can call you!")
}
func main() {
var phone Phone
phone = new(NokiaPhone)
phone.call()
phone = new(ApplePhone)
phone.call()
}
インターフェースAは、インタフェースBを実装する場合、方法の全ては、AはBのインタフェースに変換することができます。
インターフェイスを実装する構造体を使用した後、私たちは完全な機能を受け取るためにこれらのメソッドを使用するために、構造体インターフェイスパラメータ、インタフェースパラメータとしてこれを使用することができます。これはあまり汎用性は、スケーラブルな機能を提供しているにもインタフェースの実装が何であるかを気にせず、私たちは実装するためのベースのインタフェースを機能方法をプログラミングするためのインタフェースです。
func PhoneCall(phone Phone) {
phone.call()
}
func main() {
var ph1 Phone
iphone := &iPhone
ph1 = iphone
PhoneCall(ph1 )
}