Go断言
2024-09-26 01:24:57
用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)
}
最新文章
- C#中 字符串转换为计算公式,并计算结果
- 调试一个socket通信bug的心理过程和反思
- Esfog_UnityShader教程_UnityShader语法实例浅析
- java并发:简单面试问题集锦
- gitd模式-主从备份恢复
- 自定义DatePicker,年月日,不显示其中某几项
- typename使用在模板中区分static成员和类型
- php mysqli注意问题
- Linux下查看所有用户(shell脚本获取)
- linux笔记2.21
- Eclipse使用git 上传代码至github
- 一幅图的知识科普--Google免费DNS服务器
- LeetCode #3. Longest Substring Without Repeating Characters C#
- python2.x与3.x的主要区别笔记
- Json解析封装GsonUtil
- python之 正则表达式
- Python--Seaborn绘图和可视化--基本语法
- 如何安装MySQL5.5.62
- UI与开发的必备神器!— iDoc一键适配不同平台尺寸(iDoc201902-2新功能)
- English trip EM2-LP-1A Hi Teacher:Taylor
热门文章
- 委托(Delegate)简介
- 032、学容器必须懂bridge网络(2019-02-19 周二)
- 在java1.8下使用jetty报错java.lang.CharSequence cannot be resolved
- spring注解第05课 FactoryBean
- DevExpress 之 GridControl 自定义列
- iOS快捷代码块
- C# WinForm开发系列 - Crystal Report水晶报表
- nginx 相关命令
- Ubuntu18.04使用AndroidStudio3.2.1编译TensorFlow android demo【2018年12月】
- PHP入门知识