接口基础知识分享

接口基础知识分享

一、接口的定义

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

二、接口的形象例子

现实生活中Usb接口就是一个形象的接口例子,例如手机、相机、U盘这些按照统一规格设计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)     //模拟手机插入
}

三、接口与继承的区别

继承解决的是代码复用性,接口是增加功能,并且不破坏继承性

四、注意事项

1、接口的方法都没有方法体;是引用类型;
2、如果一个类型将接口的所有方法都实现,就说明这个类型实现了这个接口;
3)接口中不能拥有任何变量;
4)一个接口可以继承多个接口,实现该接口必须实现所有接口的方法;
5)空接口没有任何方法,任何类型都实现了空接口,任何变量都可以赋值给空接口;

五、接口体现多态

1、多态数组

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

在这里出现了一个小bug,在传递时候,结构体是值类型,但如果需要修改结构体的值,需要使用指针类型进行引用传递。

2、类型断言

1、由于接口是一般类型,不知道是什么类型,所以必须要使用类型断言

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

2、使用类型断言获取type

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
今日推荐