欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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") 
  } 
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。

相关标签: go 接口 查询