一句话总结:如果接口A实现了接口B中所有方法,那么A可以转化为B接口。
package options type IPeople interface { GetName() string } type IPeople2 interface { GetName() string GetAge() int } package main import ( "fmt" "options" ) type person struct { name string } func (p *person) GetName() string { return p.name } type person2 struct { name string age int } func (p *person2) GetName() string { return p.name } func (p *person2) GetAge() int { return p.age } func main() { //p不可以转化为options.IPeople2接口,没有实现options.IPeople2接口中的GetAge() var p options.IPeople = &person{"jack"} if p2, ok := p.(options.IPeople2); ok { fmt.Println(p2.GetName(), p2.GetAge()) } else { fmt.Println("p不是Ipeople2接口类型") } //p2可以转化为options.IPeople接口,因为实现了options.IPeople接口的所有方法 var p2 options.IPeople2 = &person2{"mary", 23} if p, ok := p2.(options.IPeople); ok { fmt.Println(p.GetName()) } var pp options.IPeople = &person{"alen"} if pp2, ok := pp.(*person); ok { fmt.Println(pp2.GetName()) //pp接口指向的对象实例是否是*person类型,*不能忘 } switch pp.(type) { case options.IPeople: fmt.Println("options.IPeople") //判断接口的类型 case options.IPeople2: fmt.Println("options.IPeople2") default: fmt.Println("can't found") } var ii interface{} = 43 //默认int类型 switch ii.(type) { case int: fmt.Println("int") default: fmt.Println("can't found") } }
补充:golang中Any类型使用及空接口中类型查询
1.Any类型
GO语言中任何对象实例都满足空接口interface{},空接口可以接口任何值
var v1 interface{} = 1 var v2 interface{} = "abc" var v3 interface{} = 2.345 var v4 interface{} = make(map[..]...) ....
2.1 关于空接口的类型查询方式一,使用ok
package main import "fmt" //空接口可以接受任何值 //interface { } func main() { var v1 interface{ } v1 = 6.78 //赋值一个变量v判断其类型是否为float64,是则为真,否则,为假 if v, ok := v1.(float64);ok{ fmt.Println(v, ok) }else { fmt.Println(v,ok) } }
2.2 关于空接口类型查询方式二,switch语句结合 var.type()
package main import "fmt" //空接口可以接受任何值 //interface { } func main() { var v1 interface{ } v1 = "张三" switch v1.(type) { case float32: case float64: fmt.Println("this is float64 type") case string: fmt.Println("this is string type") } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
标签:
go语言,接口查询
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
狼山资源网 Copyright www.pvsay.com
暂无“go语言实现接口查询”评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。