インターフェースの基本的な知識の共有

インターフェースの基本的な知識の共有

1つは、インターフェイスの定義です。

type 接口名 interface {
    
    
      方法名1(参数列表)返回值列表
      方法名2(参数列表)返回值列表
}

2、インターフェースの画像例

実生活では、Usbインターフェイスは、携帯電話、カメラ、USBフラッシュドライブなど、統一された仕様に従って設計されたインターフェイスの鮮やかな例です。Usbは、Usbインターフェイスを接続した後の応答が異なります。

package main 
import (
	"fmt"
)
type Usb interface{
    
    
	start() //开始工作
	stop()  //结束工作
}
type Computer struct{
    
    

} //定义电脑U盘插口
type phone struct{
    
    
	Name string
}
type U struct{
    
    
	Name string
} //定义手机以及U盘对象
func (this *phone) start(){
    
    
	fmt.Println("我是手机")
}
func (this *phone) stop(){
    
    
	fmt.Println("再见")
}
//手机已经实现了接口
func (this *U) start(){
    
    
	fmt.Println("我是U盘")
}
func (this *U) stop(){
    
    
	fmt.Println("再见")
}
//U盘已经实现了接口
func (this *Computer) Working(usb Usb){
    
    
	usb.start()
	usb.stop()
}
func main(){
    
    
   com:=&Computer{
    
    }
   u:=&U{
    
    }
   p:=&phone{
    
    }
   com.Working(u)     //模拟U盘插入
   com.Working(p)     //模拟手机插入
}

3つ目は、インターフェイスと継承の違いです。

継承はコードの再利用性を解決し、インターフェースは関数を増やすことであり、継承を破壊しません

四、注意が必要な事項

1.メソッド本体を持たないインターフェイスメソッドはありません。これは参照型です
。2。型がインターフェイスのすべてのメソッドを実装する場合、その型はインターフェイスを実装することを意味します
。3)インターフェイスは変数を持つことができません
。4)インターフェイス複数のインターフェースを継承し、インターフェースがインターフェースのすべてのメソッドを実装する必要があることを認識できます
。5)空のインターフェースにはメソッドがなく、どのタイプも空のインターフェースを実装し、任意の変数を空のインターフェースに割り当てることができます。

第五に、インターフェースはポリモーフィズムを反映している

1.ポリモーフィック配列

   var usb [2] Usb
   usb[0]= Phone {
    
    "小米手机"}
   usb[1]= U {
    
    "金士顿U盘"}
   fmt.Println(usb)

ここに小さなバグがあります。転送する場合、構造は値型ですが、構造の値を変更する必要がある場合は、参照転送にポインタ型を使用する必要があります。

2.タイプアサーション

1.インターフェースは一般的なタイプであるため、タイプがわからないため、タイプアサーションを使用する必要があります

var b interface{
    
    }
a:=b.(float32)

2.型アサーションを使用して型を取得します

func Juge(item...interface{
    
    }){
    
    
     for i,v:=range item{
    
    
		 switch v.(type){
    
    
		 case string:{
    
    
			 fmt.Printf("第%d参数的类型string 值是%v\n",i,v)
		 }
		 case int:{
    
    
			fmt.Printf("第%d参数的类型是int 值%v\n",i,v)
		}
		case student:{
    
    
			fmt.Printf("第%d参数的类型是student 值是%v\n",i,v)
		}
		case *student:{
    
    
			fmt.Printf("第%d参数的类型是*student 值是%v\n",i,v)
		}
		 }
	 }
}

コードでitem...interface{}マルチパラメータ伝導を表す

この記事を読んで自分自身を助けるなら、みんながそれをサポートするのを好むことを願っています、ありがとう

おすすめ

転載: blog.csdn.net/yyq1102394156/article/details/114068453