美文网首页技术
类型转换和类型断言

类型转换和类型断言

作者: Garry2018 | 来源:发表于2018-10-11 18:32 被阅读21次

go语言不允许隐式类型转换,而类型转换和类型断言的本质,就是把一个类型转换到另一个类型。

一、类型转换

1.语法: <结果类型> := <目标类型>(<表达式>)

2.类型转换是用来在不同但相互兼容的类型之间的相互转换的方式,当类型不兼容的时候,是无法转换的。如下:

func test() {
  var var1 int = 10
  fmt.Printf("%T->%v \n", var1, var1)
  var2 := float32(var1)
  var3 := int64(var1)
  //var4 := []int8(var1)
  //var5 := []string(var1)
  fmt.Printf("%T->%v \n", var2, var2)
  fmt.Printf("%T->%v \n", var3, var3)
  //fmt.Printf("%T->%v \n", var4, var4)
  //fmt.Printf("%T->%v \n", var5, var5)  
}

var4和var5处运行时报错,因为类型不兼容,注释后,输出如下:

int->10
float32->10
int64->10

二、类型断言

1.语法:
<目标类型的值>,<布尔参数> := <表达式>.(目标类型) //安全类型断言
<目标类型的值> := <表达式>.(目标类型) //非安全类型断言

2.类型断言的本质,跟类型转换类似,都是类型之间进行转换,不同之处在于,类型断言是在接口之间进行,相当于Java中,对于一个对象,把一种接口的引用转换成另一种。

先看一个最简单的错误的类型断言:

func test2(){
  var i interface{} = "kk"
  j:= i.(int)
  fmt.Printf("%T->%d\n",j ,j )
}

var i interface{} = "kk" 相当于java中的, Object i = "kk";
现在把这个i转换成int类型,系统内部检测到这种不匹配,会抛出一个异常。
改一下,把i的定义改为: var i interface{} =99, 就没问题了,输出为:

int->99

以上为不安全类型的断言,来看下安全的类型断言:

func test3() {
  var i interface{} ="123"
  j, b := i.(int)
  if b {
    fmt.Printf("%T->%d\n",j, j)
  } else {
    fmt.Printf("类型不匹配")
  }
}

输出“类型不匹配”

相关文章

  • Go语言类型转换和类型断言

    Go语言的类型转换和类型断言: 类型转换在编译期完成,包括强制转换和隐式转换 类型断言在运行时确定,包括安全类型断...

  • 类型转换和类型断言

    go语言不允许隐式类型转换,而类型转换和类型断言的本质,就是把一个类型转换到另一个类型。 一、类型转换 1.语法:...

  • flow中文文档(十)

    类型转换表达式 类型断言 铸造类型 类型铸造 类型转换表达式 有时候,断言类型而不用函数或变量这样做是有用的。对于...

  • Golang类型转换和类型断言

    零值 变量声明时没有初始化会默认赋值为零值 。零值是: 基本类型的类型转换 C语言转换 先看一下,在C语言中的类型...

  • Typescript踩坑点

    1,类型断言类型断言更像是类型的选择,而不是类型转换举例: 代码中要返回参数的长度,但是 length 可以是字符...

  • Typescript类型断言

    类型断言 TS 类型断言定义:把两种 有重叠关系的 数据类型 进行相互转换,把其中一种数据类型 转换成 另外一种数...

  • go类型断言

    1.类型断言就是将接口类型的值(x),转换成类型(T)。格式为:x.(T);2.类型断言的必要条件就是x是接口类型...

  • go笔记 - 类型转换

    go 存在 4 种类型转换分别为:断言、强制、显式、隐式。 通常说的类型转换是指断言,强制在日常不会使用到、显示是...

  • golang类型转换与断言

    使用方式: 总结:相似:都是右边有括号。区别:断言有. 类型转换demo: 断言demo:

  • Go语言 类型转换,类型断言,类型开关

    类型转换Go语言中提供了一种不同类型但是相互兼容的可以相互转换的方式,这种方式是非常有用且安全的。非数值间相互转换...

网友评论

    本文标题:类型转换和类型断言

    本文链接:https://www.haomeiwen.com/subject/qfxiaftx.html