インターフェースの基本的な知識の共有
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{}
マルチパラメータ伝導を表す
この記事を読んで自分自身を助けるなら、みんながそれをサポートするのを好むことを願っています、ありがとう