返回

Go 学习笔记 02 | 基本数据类型剖析,变量与内存的亲密接触

见解分享

在 Go 语言的学习之旅中,基本数据类型是不可或缺的基础。它为我们提供了构建程序的原材料,使我们能够用数字、文本和逻辑元素来塑造代码的框架。今天,我们将深入探究 Go 中的基本数据类型,重点关注字节和符文类型,揭示它们在内存中的奥秘。

不同类型的大小探索

Go 提供了多种基本数据类型,包括整型、浮点型、布尔型和复数。为了了解不同类型在内存中的占用情况,我们可以使用 unsafe.Sizeof() 函数。以下是一些常见类型的示例:

unsafe.Sizeof(int) // 4 字节
unsafe.Sizeof(int64) // 8 字节
unsafe.Sizeof(float32) // 4 字节
unsafe.Sizeof(bool) // 1 字节

类型转换的陷阱

Go 允许我们转换不同类型的值。然而,在进行高位到低位的转换时,需要警惕溢出的可能。例如:

var a int8 = 127
var b int16 = int16(a) // 溢出,因为 a 的值超过了 int16 的取值范围

数字字面量语法

Go 中的数字字面量提供了简洁的语法来表示不同类型的数字。例如:

  • 无后缀: 默认类型为 int
  • 后缀 i 或 I: int 类型
  • 后缀 f 或 F: float64 类型

浮点数的默认类型

在 64 位系统中,Go 语言中浮点数的默认类型是 float64。这意味着不带后缀的浮点数字面量将自动转换为 float64 类型。

布尔类型的默认值

布尔类型变量的默认值为 false。这与其他语言中可能将空布尔值视为 true 的做法不同。

深入字节和符文

在 Go 中,byte 和 rune 是两种特殊的整数类型,分别表示 8 位无符号整数和 Unicode 码点。byte 通常用于处理二进制数据,而 rune 用于处理 Unicode 字符。

var b byte = 0xFF // 8 位无符号整数
var r rune = 'a' // Unicode 码点,表示字符 "a"

结语

掌握基本数据类型是 Go 编程的基础。通过了解不同类型的内存表示、类型转换的注意事项以及 byte 和 rune 类型的独特之处,我们可以编写出高效、健壮且可维护的 Go 程序。在未来的学习中,我们将继续探索 Go 的类型系统,深入了解数组、切片和映射等高级数据结构。