黑松山资源网 Design By www.paidiu.com
一句话总结:如果接口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") } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
黑松山资源网 Design By www.paidiu.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
黑松山资源网 Design By www.paidiu.com
暂无评论...
更新日志
2024年06月21日
2024年06月21日
- 张学友《在我心深处》蜚声环球2024[低速原抓WAV+CUE]
- 张信哲《张信哲歌曲合集》[320K/MP3][146.1MB]
- 童安格-开盘母带直刻《挚爱珍藏版》[WAV/分轨][520MB]
- 《陈淑桦 时代巅峰经典32首 给淑桦的一封信 2CD》[WAV+CUE][1.4GB]
- 塔瑞斯世界骑士天赋怎么加点 骑士天赋加点攻略
- 塔瑞斯世界战士输出循环怎么打 战士核心技能及输出手法介绍
- 逆水寒手游甄嬛传联动新增食谱介绍
- 张学友《在我心深处》蜚声环球2024[低速原抓WAV+CUE]
- Matsutoya《TheGatesOfHeaven》Hi-Res|FLAC|96kHz/24bit
- [舞曲]2Unlimited2006-GreatestRemixHits[FLAC+CUE]
- 《黑色行动6》金库版预告:售价660元 内容多多
- 逆水寒手游码头怪盗任务最新攻略
- 塔瑞斯世界吟游诗人输出循环怎么打 吟游诗人核心技能及输出手法介绍
- 塔瑞斯世界蛮斗士输出循环怎么打 蛮斗士核心技能及输出手法介绍
- 莫扎特,莱内克尼尔森长笛协奏曲[Hi-Res96kHz24bitFLAC]