前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go语言之旅:类型转换

Go语言之旅:类型转换

原创
作者头像
杨子翔 josonyang
发布2019-09-05 23:40:17
8450
发布2019-09-05 23:40:17
举报
文章被收录于专栏:子翔的专栏子翔的专栏

类型间的转换

在Go的类型转换中,不同于其他语言,任何的类型之间都没有隐形的转换。在写代码的过程中,我们经常会用到以下一些互相转换

  • int -> string
  • float -> int
  • byte[] -> string

同类型的操作不成功是因为语言特性,总是要保证操作符两边的类型是一样的才可以,在转换的过程中有以下两种方式:

代码语言:txt
复制
var foo = 5

// type convert 1: int -> float64
var bar1 = float64(foo)
fmt.Printf("%v\n", bar1)

// type convert 2: int -> string
var bar2 = strconv.Itoa(foo)
fmt.Printf("%v\n", bar2)

可以看到有2个不同的转换方式,先说strconv,主要是string与基础类型(int、float、bool、特殊符号)的转换,以上我们还可以想到如果以下写法

代码语言:txt
复制
var foo bool = 1
// wrong
var bar = int(foo)
fmt.Printf("%v", bar)

这个写法是会报错的,会提示“cannot convert foo (type bool) to type int”,也就是说有些类型之前不能这么去转

  1. 当类型不兼容的时候,不能直接转
  2. 数值间相互转换会丢失精度,非数值间相互转换不会丢失精度,

断言

断言是个相对高级的转换,当转换对象是一个interface{}时,可以通过y.(type)来进行转换,详见https://golang.google.cn/ref/spec#Type_assertions

代码语言:txt
复制
var y interface{} = 7 // y has dynamic type int and value 7
i := y.(int)          // i has type int and value 7
fmt.Printf("%v\n", i)

其中,这里有个细节会导致会不会触发panic:

代码语言:txt
复制
//安全类型断言,失败value则为类型T对应的零值 
value,ok := y.(type)  
//非安全类型断言,失败时会panic() 
value := y.(type) 

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 类型间的转换
  • 断言
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档