func 主要(),{   {},var  data 界面,=,“ehoo"   ,if  res, ok :=,数据。(int);, ok  {   ,fmt.Printf (“int  res: % d \ n",, res)   ,}else  if  res, ok :=,数据。(bool);, ok  {   ,fmt.Printf (“bool  res: % b \ n",, res)   ,}else  {   ,fmt.Printf (“other  res: % v \ n",, res),//,断言类型的零值,结果:假的   ,}   }

<>强补充:去语言界面{}类型断言的举例使用

在去语言里经常会用{}到接口类型,它是类似于c语言中的void *类型,可以接受任意类型的参数。当我们的函数或者方法中有该参数时,要判断具体的类型值再进行相应处理。

一般格式:返回值,bool变量:{}=界面变量。(要判断的具体类型),这样就是以某个具体类型来断言,返回值就是这个具体类型的。

比如:v, b:=一个。(字符串),这个就是假设这一个接口{}变量是字符串类型,而v这个返回值就是字符串类型的变量,至于是否假设成功,就看b是真实或者错误的。

这样,如要判断多个类型的话,就要分别写多个语句,v, b:=一个。(字符串),v1, b1:=一个。(int), v2, b2:=(float64)…因为每次的返回值v, v1、v2是不同的预言类型数值,有点麻烦。

而用开关。(类型)这样语句,就省事多了,格式为:返回值:{}=界面变量。(类型)具体某一类型:例具体某一类型:……

 type  Student  struct  {
  m_Addr 字符串
  m_ID  int
  }
  ,
  func  (stu  *学生),SetAddr (addr 接口{}),(bool,错误),{
  ,//这样写法:返回值,bool变量:{}=界面变量。(要判断的具体类型),就是判断是否为指定类型的值。
  ,v, b :=, addr。(字符串),//这样就是断言v是字符串类型的变量,只能赋值给同类型的数的值。
  ,if  b {,,,//如是上边要判断的弦类型,这里会返回现实
  stu.m_Addr  v=,
  ,return 的确,nil
  {}大敌;else //如不是判断的弦类型,会返回假,下面会返回错误信息
  ,return 假,fmt.Errorf(“不是字符串类型“)
  ,}
  }
  func  (stu  *学生),SetStu (data ……接口{}),(bool,错误),{
  ,for  _, d :=, range  data {,//循环遍历参数列表,忽略第一个参数索引
  ,/*这种写法是一个一个类型判断,在判断多个类型时,比较麻烦,使用下面switch 案例就简便多了
  ,var  v, b =d。(字符串)
  ,if  b  {
  stu.m_Addr  v=,
  ,}
  ,var  v1, b1 =d。(int)
  ,if  b1  {
  stu.m_ID =, v1
  ,}
  ,*/,switch  v :=, d。(类型),{,//传递类型类型,只能在switch 案例语句使用,返回的v就是具体的值。
  ,case  int://在每一个案件判断具体类型,并对返回v值进行处理
  stu.m_ID  v=,
  ,case 字符串:
  stu.m_Addr  v=,
  ,}
  ,}
  ,return 的确,nil
  }

关于golang中失败的类型断言返回什么值就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。