类型转换有哪些需要注意的地方

类型转换的语法:T(x)。

其中T叫做目标类型,x叫做源值,可以是一个变量,也可以是一个代表值的常量,还可以是一个单值的表达式。x的类型叫做源类型。

Go语言规范中规定了哪些从源类型到目标类型的转换是合法的,编译器会帮我们检查出这些不合法的错误转换,这些我们不需要关心。我们需要关心的是那些Go语言编译器很难检测出来的问题。

  • 对于整数类型值,整数长廊之间的类型转换,原则上只要源值在目标类型的可表示范围内就是合法的。

举个栗子:把无类型的常量255转换成uint8类型的值。

uint8(255)
  • 需要特别注意的是,源整数类型的可表示范围较大,而目标类型的可表示范围较小的情况。

举个栗子:

var srcInt = int16(-255)
dsInt := int8(srcInt)

dsInt 的值现在变成了 1

  • 当把一个浮点数类型的值转换为整数类型时,前者的小数部分会被全部截掉。

  • 直接把一个整数值转换为一个string类型的值是可行的,但是需要注意:被转换的整数值应该可以代表一个有效的Unicode代码点,否则转换的结果将会是"�"(仅由高亮的问号组成的字符串值)。

例如:

string(-1)
  • string类型和各种切片类型之间互转时需要注意:一个string类型向[]byte类型转换时,代表着以UTF-8编码的字符串会被拆分成零散的独立的字节。

举例子

fmt.Println(len("我"))

结果是3。 Unicode字符集中除了ASCII之外的部分,编码时3个字节才能表示一个字符。

  • 一个值从string类型向[]rune类型转换时,代表着字符串会被拆分成一个个Unicode字符。

转载于:https://my.oschina.net/u/3672057/blog/2967657

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值