原文链接:https://www.2cto.com/kf/201712/703563.html

1. 用于判断变量类型

demo如下:

  switch t := var.(type){
   case string:
   //add your operations
   case int8:
   //add your operations
   case int16:
   //add your operations
   default:
   return errors.New("no this type")
  }
} //空接口包含所有的类型,输入的参数均会被转换为空接口
//变量类型会被保存在t中

2. 判断某个接口类型是否实现了特定接口

为实现这一目标,代码如下:

if t, ok := something.(I) ; ok {
// 对于某些实现了接口I的
// t是其所拥有的类型
}

如果已经确定了something实现了接口I,可以直接写出下面的代码:

//在确定了something实现了接口I的情况下
//t时something所拥有的类型
//这说明ok
t := something.(I)

当然,也可以封装在一个函数中:

func IsImplement(interface {}) bool{
  _, ok := something.(I);
  return ok
}

注意

something必须为接口(Interface)类型,才可以使用类型断言。假如是其他类型,使用类型断言时,需要转换,最好的方法是定义函数,封装类型断言方法。

分别运行以下代码,看看未实现特定接口的类型使用断言会发生什么:
demo1.go

type I interface{
Get() int
Put(int)
} //定义结构体,实现接口I
type S struct {
i int
}
func (p *S) Get() int {
return p.i
}
func (p *S) Put(v int ) {
p.i = v
} //使用类型断言
func GetInt( some interface {}) int {
return some.(I).Get()
} func main(){
var some = &S{i:}
fmt.Println(GetInt(some))
}

demo2.go

type I interface{
Get() int
Put(int)
} //定义结构体,实现接口I
type S struct {
i int
}
func (p *S) Get() int {
return p.i
}
func (p *S) Put(v int ) {
p.i = v
} //使用类型断言
func GetInt( some interface {}) int {
return some.(I).Get()
} func main(){
var i int =
fmt.Println(GetInt(i))
}

golang学习笔记:Interface类型断言详情的更多相关文章

  1. golang学习笔记 ---interface

    1. 什么是interface接口 interface 是GO语言的基础特性之一.可以理解为一种类型的规范或者约定.它跟java,C# 不太一样,不需要显示说明实现了某个接口,它没有继承或子类或“im ...

  2. golang 学习笔记 --基本类型

    字符串值表示了一个一个字符值的集合,在底层,一个字符串值即一个包含了若干字节的序列,长度为0的序列与一个空字符串对应.字符串的长度即底层字节列中字节的个数. 字符串值是不可变的,对字符串的操作只会返回 ...

  3. golang学习笔记16 beego orm 数据库操作

    golang学习笔记16 beego orm 数据库操作 beego ORM 是一个强大的 Go 语言 ORM 框架.她的灵感主要来自 Django ORM 和 SQLAlchemy. 目前该框架仍处 ...

  4. golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息

    golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放 ...

  5. golang学习笔记8 beego参数配置 打包linux命令

    golang学习笔记8 beego参数配置 打包linux命令 参数配置 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/docs/mvc/contro ...

  6. golang学习笔记19 用Golang实现以太坊代币转账

    golang学习笔记19 用Golang实现以太坊代币转账 在以太坊区块链中,我们称代币为Token,是以太坊区块链中每个人都可以任意发行的数字资产.并且它必须是遵循erc20标准的,至于erc20标 ...

  7. golang学习笔记13 Golang 类型转换整理 go语言string、int、int64、float64、complex 互相转换

    golang学习笔记13 Golang 类型转换整理 go语言string.int.int64.float64.complex 互相转换 #string到intint,err:=strconv.Ato ...

  8. golang学习笔记5 用bee工具创建项目 bee工具简介

    golang学习笔记5 用bee工具创建项目 bee工具简介 Bee 工具的使用 - beego: 简约 & 强大并存的 Go 应用框架https://beego.me/docs/instal ...

  9. go语言,golang学习笔记1 官网下载安装,中文社区,开发工具LiteIDE

    go语言,golang学习笔记1 官网下载安装,中文社区,开发工具LiteIDE Go语言是谷歌2009发布的专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速 ...

随机推荐

  1. acwing 173. 矩阵距离(bfs)

    给定一个N行M列的01矩阵A,A[i][j] 与 A[k][l] 之间的曼哈顿距离定义为: dist(A[i][j],A[k][l])=|i−k|+|j−l|dist(A[i][j],A[k][l]) ...

  2. 读/写xlsx文件

    安装 pip install openpyxl 1.创建Excel电子表格 建立新文档需要调用Workbook对象的save方法,一个Workbook对象代表一个Excel工作簿,该方法的参数是保存的 ...

  3. PHP 基础语法介绍

    PHP 语法 PHP 脚本在服务器上执行,然后将纯 HTML 结果发送回浏览器. 基本的 PHP 语法 PHP 脚本可以放在文档中的任何位置. PHP 脚本以 <?php 开始,以 ?>  ...

  4. HTML <html> manifest 属性

    实例 带有缓存 manifest 的 HTML 文档(用于离线浏览): <!DOCTYPE HTML><html manifest="demo.appcache" ...

  5. PHP __construct() 函数

    实例 函数创建一个新的 SimpleXMLElement 对象,然后输出 body 节点的内容:高佣联盟 www.cgewang.com <?php $note=<<<XML ...

  6. Pintech品致-高压放大器

      pintech品致推出的HA-520(200KHz,500Vp-p)高压放大器真的是实用的高电压信号放大器, 体积小,轻便及简易的操作, 高电压输出(800Vp-p)等优点.连续输出电流量最大值达 ...

  7. java多线程之锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁

    转载至:https://blog.csdn.net/zqz_zqz/article/details/70233767 之前做过一个测试,详情见这篇文章<多线程 +1操作的几种实现方式,及效率对比 ...

  8. three.js 自制骨骼动画(二)

    上一篇说了一下自制骨骼动画,这一篇郭先生使用帧动画让骨骼动画动起来.帧动画是一套比较完善的动画剪辑方法,详细我的api我们就不多说了,网上有很多例子,自行查找学习.在线案例请点击博客原文.话不多说先上 ...

  9. JDK8的Stream操作

    原文:https://mp.weixin.qq.com/s/N2zor5RzuHHTHQLHWVBttg 作者:思海同学  好好学java 其他资料:https://mp.weixin.qq.com/ ...

  10. 动态绑定CheckBoxList,并默认勾选多选框

    首先这是界面展示列: 当我点击更新操作后,效果如下: 其中所属区域的复选框为动态绑定,并且已为我们默认勾选了相关选项,具体操作如下: 前台代码: <tr> <td class=&qu ...