go语言实现接口查询

一句话总结:如果接口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")
  }
}

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

(0)

相关推荐

  • Go 语言中关于接口的三个

    我的在线博客:http://golang.iswbm.com 我的 Github:github.com/iswbm/GolangCodingTime 1. 对方法的调用限制 接口是一组固定的方法集,由于静态类型的限制,接口变量有时仅能调用其中特定的一些方法. 请看下面这段代码 package main import "fmt" type Phone interface { call() } type iPhone struct { name string } func (phone i

  • Go语言使用swagger生成接口文档的方法

    swagger介绍 Swagger本质上是一种用于描述使用JSON表示的RESTful API的接口描述语言.Swagger与一组开源软件工具一起使用,以设计.构建.记录和使用RESTful Web服务.Swagger包括自动文档,代码生成和测试用例生成. 在前后端分离的项目开发过程中,如果后端同学能够提供一份清晰明了的接口文档,那么就能极大地提高大家的沟通效率和开发效率.可是编写接口文档历来都是令人头痛的,而且后续接口文档的维护也十分耗费精力. 最好是有一种方案能够既满足我们输出文档的需要又能

  • golang接口IP限流,IP黑名单,IP白名单的实例

    增加中间件 可以选择普通模式和LUA脚本模式,建议选择普通模式,实际上不需要控制的那么精确. package Middlewares import ( "github.com/gin-gonic/gin" "strconv" "time" "voteapi/pkg/app/response" "voteapi/pkg/gredis" "voteapi/pkg/util" ) const

  • 如何判断Golang接口是否实现的操作

    前言 在看一个底层库的的时候,看到了一个比较奇怪的写法,于是乎有了本文. 主要探讨两个问题: 1.利用编译来判断Golang接口是否实现 2.延伸出的make和new的区别 正文 1.利用编译来判断Golang接口是否实现 看了一个底层通用链接池的库,有这么一行代码: var _ Pooler = new(WeightedRoundRobin) 需要解释的是:Pooler是一个接口类型. type Pooler interface { // ... } 刚开始看是疑惑的,为什么new了之后是要抛

  • GO语言gin框架实现管理员认证登陆接口

    后台用户登录验证功能是很多项目的必须要有的逻辑 , 也是常见的技术需求 . 要实现这个逻辑首先要有数据库表结构如下: CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL DEFAULT '', `password` varchar(50) NOT NULL DEFAULT '', `nickname` varchar(50) NOT NULL DEFAULT '', `cr

  • go语言实现接口查询

    一句话总结:如果接口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 (

  • Go语言中接口组合的实现方法

    本文实例讲述了Go语言中接口组合的实现方法.分享给大家供大家参考.具体实现方法如下: 在Go语言中,可以在接口A中组合其它的一个或多个接口(如接口B.C),这种方式等价于在接口A中添加接口B.C中声明的方法. 复制代码 代码如下: //接口中可以组合其它接口,这种方式等效于在接口中添加其它接口的方法  type Reader interface {      read()  }  type Writer interface {      write()  }    //定义上述两个接口的实现类 

  • 使用C#语言实现的查询条件界面展开和收起功能

    先简单说一下应用场景,现有一个C#客户端的查询界面,上方放置查询条件,下方放置查询结果.因为实际情况中查询条件可能占了好几行的位置,所以希望在界面上默认只保留一行最主要的查询条件,并在右侧有一个"展开/收起"功能. 收起时界面: 展开时界面: 最开始我的实现方式是这样的,在界面上放置一个LinkLabel,设置此LinkLabel的鼠标单击事件,调整查询条件所在Panel的Height属性. C#代码如下: using System; using System.Collections.

  • PHP调用全国天气预报数据接口查询天气示例

    本文实例讲述了PHP调用全国天气预报数据接口查询天气.分享给大家供大家参考,具体如下: 基于PHP的聚合数据全国天气预报API服务请求的代码样例 本代码示例是基于PHP的聚合数据全国天气预报API服务请求的代码样例,使用前你需要: ①:通过https://www.juhe.cn/docs/api/id/39 申请一个天气预报API的appkey 样例代码包含了获取支持城市列表.根据城市获取天气预报.根据IP地址请求天气预报.根据GPS坐标请求天气.城市3小时天气预报的实现.示例代码主要是解析一些

  • php调用百度人脸识别接口查询数据库人脸信息实现验证登录功能

    博主在进行鼎食城毕业设计时,需要实现一个人脸识别登录功能,想到可以利用百度的人脸识别接口来完成,于是便去下载了百度的识别SDK,我用的是PHP,需要的的可以去下载其他版本,以下是识别效果: 用户在开始注册时需要上传一张自己的人脸照片,然 后再登录时可以通过输入自己的用户名,然后上传自己拍照的图片通过数据库查询比对人脸,根据匹配相似的实现登录: 以下时识别代码: 核心代码: $result = $client->match(array( array( 'image' => base64_enco

  • 一篇文章带你玩转go语言的接口

    目录 一.其他语言 二.go语言 三.go接口实现多态 四.空接口的使用(重点) 4.1定义 4.2空接口使用 4.3空接口几个要注意的坑(我刚学时的错误) 总结 一.其他语言 其他语言中所提供的接口概念:接口主要作为不同组件之间的契约存在.对契约的实现是强制的(侵入式接口),你必须声明你的确实现了该接口.为了实现一个接口,你需要从该接口继承. interface IFoo { void Bar(); } // Java文法 // ... class Foo implements IFoo {

  • go语言interface接口继承多态示例及定义解析

    目录 1.什么是接口 2.接口定义 3.多态 多态加减计算器 4.接口继承与转换 5.空接口 6.接口转换 7.实现map字典接口 8.interface案例 1.什么是接口 接口就是一种规范与标准,在生活中经常见接口,例如:笔记本电脑的USB接口,可以将任何厂商生产的鼠标与键盘,与电脑进行链接.为什么呢?原因就是,USB接口将规范和标准制定好后,各个生产厂商可以按照该标准生产鼠标和键盘就可以了. 在程序开发中,接口只是规定了要做哪些事情,干什么.具体怎么做,接口是不管的.这和生活中接口的案例也

  • Go语言利用接口实现链表插入功能详解

    目录 1. 接口定义 1.1 空接口 1.2 实现单一接口 1.3 接口多方法实现 2. 多态 2.1 为不同数据类型的实体提供统一的接口 2.2 多接口的实现 3. 系统接口调用 4. 接口嵌套 5. 类型断言 5.1 断言判断 5.2 多类型判断 6. 使用接口实现链表插入 1. 接口定义 Interface 类型可以定义一组方法,不需要实现,并且不能包含任何的变量,称之为接口 接口不需要显示的实现,只需要一个变量,含有接口类型中的所有方法,那么这个变量就实现了这个接口,如果一个变量含有多个

  • 详解Spring Data JPA中Repository的接口查询方法

    目录 1.查询方法定义详解 2.搜索查询策略 3.查询创建 4.属性表达式 5.特殊参数处理 6.限制查询结果 7. repository方法返回Collections or Iterables 8.repository方法处理Null 9.查询结果流 10.异步查询结果 1.查询方法定义详解 repository代理有两种方式从方法名中派生出特定存储查询. 通过直接从方法名派生查询. 通过使用一个手动定义的查询. 可用的选项取决于实际的商店.然而,必须有一个策略来决定创建什么实际的查询. 2.

  • Go语言fsnotify接口实现监测文件修改

    目录 前言 安装工具 关键类型 Event结构体 Op类型 Watcher结构体 Channel 函数 Watcher工厂函数 完整例子 前言 在开发过程中,经常需要观察本地文件系统的更改.经过谷歌了几个小时后,到了一个简单的工具来做这件事. 该工具就是fsnotify是一个Go跨平台文件系统通知工具.它提供了一个简单的接口来监测本地文件系统中的更改. 本文我们就来看看如何使用这个工具. 安装工具 $ go get github.com/fsnotify/fsnotify 关键类型 我们先来了解

随机推荐