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

浙公网安备 33010602011771号