go语言实现接口查询
程序员文章站
2022-06-23 10:42:42
一句话总结:如果接口a实现了接口b中所有方法,那么a可以转化为b接口。package optionstype ipeople interface { getname() string}type ipe...
一句话总结:如果接口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") } }
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
上一篇: MySQL null的一些易错点