主页 > 知识库 > GO语言类型转换和类型断言实例分析

GO语言类型转换和类型断言实例分析

热门标签:呼叫中心市场需求 地方门户网站 网站排名优化 铁路电话系统 服务外包 百度竞价排名 Linux服务器 AI电销

本文实例讲述了GO语言类型转换和类型断言的用法。分享给大家供大家参考。具体分析如下:

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

一、类型转换

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

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

复制代码 代码如下:
func test4() {
    var var1 int = 7
    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->%d", var4, var4)
    //fmt.Printf("%T->%d", var5, var5)
}

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

复制代码 代码如下:
int->7
float32->7
int64->7

值得注意的是,如果某些类型可能引起误会,应该用括号括起来转换,如下:
复制代码 代码如下:
func test5() {
    //创建一个int变量,并获得它的指针
    var1 := new(int32)
    fmt.Printf("%T->%v\n", var1, var1)
    var2 := *int32(var1)
    fmt.Printf("%T->%v\n", var2, var2)
}

*int32(var1)相当于*(int32(var1)),一个指针,当然不能直接转换成一个int32类型,所以该表达式直接编译错误。将该表达式改为 (*int32)(var1)就可以正常输出了。

二、类型断言

(1)语法:

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

  目标类型的值> := 表达式>.( 目标类型 )  //非安全类型断言

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

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

复制代码 代码如下:
func test6() {
    var i interface{} = "kk"
    j := i.(int)
    fmt.Printf("%T->%d\n", j, j)
}

var i interface{} = "KK" 某种程度上相当于java中的,Object i = "KK";

现在把这个 i 转换成 int 类型,系统内部检测到这种不匹配,就会调用内置的panic()函数,抛出一个异常。

改一下,把 i 的定义改为:var i interface{} = 99,就没问题了。输出为:

复制代码 代码如下:
int->99

以上是不安全的类型断言。我们来看一下安全的类型断言:
复制代码 代码如下:
func test6() {
    var i interface{} = "TT"
    j, b := i.(int)
    if b {
        fmt.Printf("%T->%d\n", j, j)
    } else {
        fmt.Println("类型不匹配")
    }
}

输出“类型不匹配”。

希望本文所述对大家的GO语言程序设计有所帮助。

您可能感兴趣的文章:
  • 手把手教你导入Go语言第三方库
  • golang gopm get -g -v 无法获取第三方库的解决方案
  • golang 输出重定向:fmt Log,子进程Log,第三方库logrus的详解
  • golang值类型转换成[]uint8类型的操作
  • go 类型转换方式(interface 类型的转换)
  • Mongodb 利用mongoshell进行数据类型转换的实现方法
  • Go语言string,int,int64 ,float之间类型转换方法
  • Go 第三方库之类型转换问题

标签:铜川 湘潭 崇左 仙桃 兰州 黄山 湖南 衡水

巨人网络通讯声明:本文标题《GO语言类型转换和类型断言实例分析》,本文关键词  ;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 收缩
    • 微信客服
    • 微信二维码
    • 电话咨询

    • 400-1100-266