重学Golang-接口使用总结

        接口类型是对其他类型行为的概括与抽象,接口类型可以定义一组方法,但是这些方不是必要实现的。接口本质上也是一种类型,是指针类型,接口可以实现多态。接口本身不能创建实例,但是可以只想一个已经实现了该接口方法的自定义类型来实现。

接口赋值

        分为两种情况:

        1)将实现了接口的对象实例赋值给接口

        2)将一个接口赋值给另一个接口,注意,只要两个接口的方法列表相同就可以互相赋值,但是接口赋值并不一定完全等价(方法完全相同),只要接口B的方法列表是接口A的方法列表的子集,那么接口A就可以赋值给接口B

        示例

package main
import(
	"fmt"
)

type interfaceI interface{
	write()
}

type interfaceII interface{
	write()
	read()
}

type UDP struct{
	addr string
}

func(udp UDP)write(){
	fmt.Println("udp write...")
}

func(udp UDP)read(){
	fmt.Println("udp read...")
}

func main(){
	var udp UDP
	var ifc interfaceII = udp
    ifc.write()
	var ifc1 interfaceI = ifc
	ifc1.write()
}
输出:
udp write...
udp write...

接口查询

        接口查询在程序运行时进行,查询是否成功,也要在运行期才能够确定。可以通过使用“接口类型.(type)”形式来判断接口存储的类型,接口查询常用语类型推断。

        示例:

func Len(array interface{})int{
	var length int
	if array == nil{
		length = 0
	}
	switch array.(type) {
	case []int:
		length = len(array.([]int))
	case []string:
		length = len(array.([]string))
	case []float32:
		length = len(array.([]float32))
	}
	return length
}

接口实现多态

        多态功能一般要结合Go语言的方法实现,作为函数参数可以很容易实现多态

        示例:

package main
import(
	"fmt"
)

type message interface{
	send()
}

type Email struct{
	data string
	receiver string
}

func(e *Email)send(){
	fmt.Printf("send email message data:%s,receiver:%s...",e.data,e.receiver)
}

type WeChat struct{
	data string
	receiver string
}

func(we *WeChat)send(){
	fmt.Printf("send wechat message data:%s,receiver:%s...",we.data,we.receiver)
}

func sendMessage(msg message){
	msg.send()
}

func main(){
	email := Email{
		data:"email data",
		receiver:"email receiver",
	}
	sendMessage(&email)
	wechat := WeChat{
		data:"wechat data",
		receiver:"wechat receiver",
	}
	sendMessage(&wechat)

}
输出:
send email message data:email data,receiver:email receiver...
send wechat message data:wechat data,receiver:wechat receiver...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值