使用if实现断言

package main

import "fmt"

type Student struct {
name string
id int
} func main() {
i := make([]interface{}, )
i[] =
i[] = "hello world"
i[] = Student{"miki", }
//类型查询,查询断言
//第一个返回下标,第二个返回下标对应的值,data分别是i[0],i[1],i[2],
for index, data := range i{
//第一个返回的是值 ,第二个返回的是判断结果的真假
if value, ok := data.(int); ok == true {
fmt.Printf("x[%d]类型为int, 内容为%d\n", index, value)
}else if value, ok := data.(string); ok == true {
fmt.Printf("x[%d]类型为string, 内容为%d\n", index, value)
}else if value, ok := data.(Student); ok == true {
fmt.Printf("x[%d]Student, 内容为name=%s, id=%d\n", index, value.name, value.id)
}
}
}

执行的结果为

x[]类型为int, 内容为1
x[]类型为string, 内容为%!d(string=hello world)
x[]Student, 内容为name=miki, id=

如果是使用switch的方式进行断言的话就会像这样

package main

import "fmt"

type Student struct {
name string
id int
} func main() {
i := make([]interface{}, )
i[] =
i[] = "hello world"
i[] = Student{"miki", }
//类型查询,查询断言
//第一个返回下标,第二个返回下标对应的值,data分别是i[0],i[1],i[2],
for index, data := range i{
//第一个返回的是值 ,第二个返回的是判断结果的真假
switch value := data.(type) { //这里是data.(type)的方式
case int:
fmt.Printf("x[%d]类型为int, 内容为%d\n", index, value)
case string:
fmt.Printf("x[%d]类型为string, 内容为%d\n", index, value)
case Student:
fmt.Printf("x[%d]Student, 内容为name=%s, id=%d\n", index, value.name, value.id)
}
}
}

执行结果

x[]类型为int, 内容为1
x[]类型为string, 内容为%!d(string=hello world)
x[]Student, 内容为name=miki, id=

[GO]断言的更多相关文章

  1. iOS-----程序异常处理----- 断言NSAssert()和NSParameterAssert区别和用处

    NSAssert和assert是断言,主要的差别是assert在断言失败的时候只是简单的终止程序,而NSAssert会报告出错误信息并且打印出来.所以尽管的使用NSAssert,可以不去使用asser ...

  2. GO语言总结(5)——类型转换和类型断言

    上一篇博客介绍了Go语言的数组和切片——GO语言总结(4)——映射(Map),本篇博客介绍Go语言的类型转换和类型断言 由于Go语言不允许隐式类型转换.而类型转换和类型断言的本质,就是把一个类型转换到 ...

  3. postman 断言解析

    最近在学习postman官方文档, 顺势翻译出来,以供学习! postman断言是JavaScript语言编写的,在postman客户端指定区域编写即可. 断言会在请求返回之后,运行,并根据断言的pa ...

  4. 测试框架Mocha与断言expect

    测试框架Mocha与断言expect在浏览器和Node环境都可以使用除了Mocha以外,类似的测试框架还有Jasmine.Karma.Tape等,也很值得学习. 整个项目源代码: 为什么学习测试代码? ...

  5. JavaScrict中的断言调试

    今天在看忍者秘籍的时候,看到一个断言方法.查阅了一下资料,原来javascript中的console也包含这个方法.具体用法如下: <script type="text/javascr ...

  6. 断言与异常(Assertion Vs Exception)

    在日常编程实践中,断言与异常的界限不是很明显,这也使得它们常常没有被正确的使用.我也在不断的与这个模糊的怪兽搏斗,仅写此文和大家分享一下我的个人看法.我想我们还可以从很多角度来区别断言和异常的使用场景 ...

  7. 断言(Assert)与异常(Exception)

    断言是被用来检查非法情况而不是错误情况,即在该程序正常工作时绝不应该发生的非法情况,用来帮助开发人员对问题的快速定位.异常处理用于对程序发生异常情况的处理,增强程序的健壮性.容错性,减少程序使用中对用 ...

  8. Linux Kernel 代码艺术——编译时断言

    本系列文章主要写我在阅读Linux内核过程中,关注的比较难以理解但又设计巧妙的代码片段(不关注OS的各个模块的设计思想,此部分我准备写在“深入理解Linux Kernel” 系列文章中),一来通过内核 ...

  9. selenium自动化-java-封断言类2

    封装断言类 package streamax.com; import java.util.ArrayList; import java.util.List; import org.testng.Ass ...

  10. selenium自动化-java-封装断言

    封装的断言. 1 package com.baidu.www; import org.testng.Assert; /* * 封装断言 */ public class assertion { stat ...

随机推荐

  1. [Java][Web]Request 实现转发和 MVC 设计模式

    String data = "aaaaa"; request.setAttribute("data",data); // 将数据存在 request reque ...

  2. Java安全 – JCE Blowfish算法报错

    代码里用Blowfish算法加解密,结果jdk升到1.7后算法初始化失败 java.lang.RuntimeException: java.lang.RuntimeException: PANIC: ...

  3. Tkinter Label(标签)

      Tkinter Label : 这个小工具,实现了显示框,在那里你可以把文本或图像.这个widget中显示的文本可以在任何时候你想要更新.   这个小工具,实现了显示框,在那里你可以把文本或图像. ...

  4. C#接口的三种实现方式

    转自原文C#接口的三种实现方式 public interface MyInterface { /// 下面三个方法的签名都是 /// .method public hidebysig newslot ...

  5. Halcon学习(三)赋值与数组操作

    assign : 对数据赋值,对数组的初始化.但不能对数组中的某一个值进行赋值. 举例:Tuple1 := [1,0,3,4,5,6,7,8,9]    // 对数组进行初始化 Val := sin( ...

  6. C# 6 与 .NET Core 1.0 高级编程 - C# 6 的新功能

    个人原创译文,转载请注明出处.有不对的地方欢迎指出与交流. 英文原文:Professional C# 6 and .NET Core 1.0 - What’s New in C# 6 C# 6 的新功 ...

  7. firebug,chrome调试工具的使用

    ​http://ued.taobao.org/blog/?p=5534 chrome调试 http://www.cnblogs.com/QLeelulu/archive/2011/08/28/2156 ...

  8. iOS学习之UIPickerView控件的简单使用

    UIPickerView控件在给用户选择某些特定的数据时经常使用到,这里演示一个简单的选择数据,显示在UITextField输入框里,把UIPickerView作为输入View,用Toolbar作为选 ...

  9. Django之ModelForm篇

    ModelForm a. class Meta: model, # 对应Model的 fields=None, # 字段 exclude=None, # 排除字段 labels=None, # 提示信 ...

  10. linux服务器中Apache隐藏index.php失败

    可以通过URL重写隐藏应用的入口文件index.php,下面是相关服务器的配置参考: [Apache] httpd.conf配置文件中加载了mod_rewrite.so模块 AllowOverride ...