用Go语言提供的类型检测方法,同时也可作为断言的解决方案:

package main

import (
"fmt"
"reflect"
) type MyStruct struct {
} func (a *MyStruct) Action() {
fmt.Println("Hello")
} func main() {
var M map[string]interface{}
M = make(map[string]interface{}, 100)
M["MyStruct"] = &MyStruct{}
om := M["MyStruct"] // the type of variable m is interface
m := om.(*MyStruct) // so asserts that value restored in m
fmt.Println(reflect.TypeOf(m)) // *main.MyStruct
m.Action()
}

m := om.(*MyStruct)

    • 如果om是MyStruct类型,则将转换后的类型赋值给m。
    • 如果MyStruct被定义为一个接口,只要实现了这个接口的对象,此操作都会成功。

不过需要注意的是,如果false了,也就是不匹配,就会产生panic错误。

还有一种不产生错误的方法。

  m, ok := om.(*MyStruct)

使用两个变量接受返回值,如果ok为false,则m为零值,但是不会报错。

因此你可以这样来进行错误处理:

if !ok {
fmt.Println("Type not matched!")
os.Exit(1)
}

  

最新文章

  1. C#中 字符串转换为计算公式,并计算结果
  2. 调试一个socket通信bug的心理过程和反思
  3. Esfog_UnityShader教程_UnityShader语法实例浅析
  4. java并发:简单面试问题集锦
  5. gitd模式-主从备份恢复
  6. 自定义DatePicker,年月日,不显示其中某几项
  7. typename使用在模板中区分static成员和类型
  8. php mysqli注意问题
  9. Linux下查看所有用户(shell脚本获取)
  10. linux笔记2.21
  11. Eclipse使用git 上传代码至github
  12. 一幅图的知识科普--Google免费DNS服务器
  13. LeetCode #3. Longest Substring Without Repeating Characters C#
  14. python2.x与3.x的主要区别笔记
  15. Json解析封装GsonUtil
  16. python之 正则表达式
  17. Python--Seaborn绘图和可视化--基本语法
  18. 如何安装MySQL5.5.62
  19. UI与开发的必备神器!— iDoc一键适配不同平台尺寸(iDoc201902-2新功能)
  20. English trip EM2-LP-1A Hi Teacher:Taylor

热门文章

  1. 委托(Delegate)简介
  2. 032、学容器必须懂bridge网络(2019-02-19 周二)
  3. 在java1.8下使用jetty报错java.lang.CharSequence cannot be resolved
  4. spring注解第05课 FactoryBean
  5. DevExpress 之 GridControl 自定义列
  6. iOS快捷代码块
  7. C# WinForm开发系列 - Crystal Report水晶报表
  8. nginx 相关命令
  9. Ubuntu18.04使用AndroidStudio3.2.1编译TensorFlow android demo【2018年12月】
  10. PHP入门知识