Go 接口

interface接口可以定义一组方法,但是不需要实现。interface 不能包含任何变量,可以看成是一组方法的封装。这些方法的实现是在具体的自定义类型中。

 

接口本身不能创建实例,但是可以指向一个实现了该接口的自定义类型的实例。

接口如果想要指向某个实例,这个实例的类型必须实现了该接口包含的所有方法。

一个类型可以实现多个接口

一个接口可以继承多个别的接口,如果某个类要实现该接口,则必须要实现这些接口的所有方法

interface 是引用类型,默认指向nil

空接口:没有任何方法,可以指向任何类的实例

接口类型断言:

由于接口是一般类型,参数传递过程中就不知道它指向实例的原来的类型,因此就需要类型断言来匹配实例的类型。

package main

import(
	"fmt"
)

type If interface{
	DoA()
	DoB()
}

type Stu struct{

}

func (this *Stu)DoA(){
	fmt.Println("DoA...")
}

func (this *Stu)DoB(){
	fmt.Println("DoB...")
}

func GetType(items... interface{}){
	for index,v := range items{
		fmt.Printf("第%d参数的类型是%T,值是%v\n",index,v,v)
	}
}

func main(){
	var i If
	i = &Stu{}
	i.DoA()
	i.DoB()

	var n1 float32 = 1.1
	var n2 float64 = 2.2
	var n3 int32 = 10
	var s Stu
	var str string = "你好"
	var n4 = 20
	GetType(n1, n2,n3,s,str,n4)	
}

  

 

 接口的断言

	var x int32 = 10
	var inter interface{} = x
	res,ok := inter.(int32)
	if !ok{
		fmt.Println("type assert failed")
	}
	fmt.Println("res=",res)//输出 res=10

  

posted @ 2020-04-05 15:30  醉深梦始  阅读(168)  评论(0)    收藏  举报