GO语言数据类型| 豆包MarsCode AI 刷题

73 阅读3分钟

整型

Go语言中的整型分为有符号整型和无符号整型,具体包括:

  • 有符号整型:int8int16int32int64int(平台相关)

  • 无符号整型:uint8(别名byte)、uint16uint32uint64uint 各类型所占位数与取值范围如下:

  • int8 / uint8 占位8 bit 范围-128 至 127 / 0 至 255

  • int16 / uint16 占位16 bit 范围-32768 至 32767 / 0 至 65535

  • int32 / uint32 占位32 bit 范围-2^31 至 2^31-1 / 0 至 2^32-1

  • int64 / uint64 占位64 bit 范围-2^63 至 2^63-1 / 0 至 2^64-1

  • int / uint 平台相关取决于操作系统和处理器架构

常见问题与易错点

溢出:超出整型范围的操作可能导致溢出。Go语言不会自动检测整数溢出,而是默默地进行模运算。应避免潜在的溢出风险,或使用math/big包处理大整数。 var maxUint8 uint8 = 255 maxUint8 += 1 // maxUint8现在为0,发生了溢出

类型转换:不同类型之间需要显式转换,否则会引发编译错误。确保转换目标类型足够容纳源类型的数据。 var i int32 = 1000 var u uint8 = uint8(i) // 转换前需确保i的值在uint8范围内

浮点型

Go语言的浮点型包括:

单精度浮点型:float32 双精度浮点型:float64

常见问题与易错点

精度损失:浮点数并非精确表示,进行某些操作(如除法、比较)时可能引入不可预期的精度误差。对于要求高精度计算的场景,考虑使用math/big包提供的Rat类型。

var a, b float64 = 0.1, 0.2 fmt.Println(a + b == 0.3) // 输出false,由于精度损失导致相等判断失败

NaN与无穷:浮点数存在特殊值NaN(Not-a-Number)和正负无穷。涉及这些值的比较和运算需特别留意: var nan float64 = math.NaN() fmt.Println(nan == nan) // 输出false,NaN不等于任何值,包括自身 var inf float64 = math.Inf(1) // 正无穷 fmt.Println(inf > 0) // 输出true,正无穷大于任何有限实数

布尔型

布尔型在Go语言中表示真(true)或假(false)两种状态。布尔值常用于条件判断、逻辑运算以及标志变量。

常见问题与易错点

非布尔类型与布尔操作:只有布尔值才能参与逻辑运算。误将非布尔值用于条件判断或逻辑运算会导致编译错误。 var num int = 0 if num { // 编译错误:non-bool num (type int) used as if condition }

滥用布尔值:避免将布尔型作为数值类型使用,如进行算术运算或赋值给非布尔变量。这种做法违反了类型系统的初衷,降低了代码可读性。 var flag bool = true var count int = flag // 避免此类赋值,应使用if或switch判断布尔值并相应处理