面试题答案
一键面试- 可能出现的陷阱:
- 当将较大范围的整数类型(如
int64
)转换为较小范围的整数类型(如int8
)时,可能会发生数据截断。因为int8
的范围是-128
到127
,如果int64
的值超出这个范围,转换后的值将是原值对int8
类型范围取模后的结果,导致数据不准确。
- 当将较大范围的整数类型(如
- 举例说明:
package main
import (
"fmt"
)
func main() {
var num int64 = 200
var smallNum int8 = int8(num)
fmt.Printf("转换前: %d, 转换后: %d\n", num, smallNum)
}
在上述代码中,int64
类型的num
值为200
,超出了int8
的范围。当转换为int8
类型时,200 % 256 = -56
(因为int8
是有符号类型,这里按照补码规则计算),输出结果为:
转换前: 200, 转换后: -56
- 规避这种陷阱的方法:
- 在进行转换之前,先进行范围检查。例如:
package main
import (
"fmt"
)
func main() {
var num int64 = 200
if num >= -128 && num <= 127 {
var smallNum int8 = int8(num)
fmt.Printf("转换前: %d, 转换后: %d\n", num, smallNum)
} else {
fmt.Println("值超出int8范围,无法安全转换")
}
}
这样在转换之前判断num
的值是否在int8
的范围内,如果在则进行转换,否则给出提示,避免了数据截断带来的错误。