第六回:Go 语言数据类型

华府万物皆有归属(全类型详解)
秋香
秋香: (眉头紧锁,手里拿着一本账簿) 唉,这华府库房里的东西杂乱无章,有银两、有字画、有家具,还有西洋进贡的钟表,这账簿该怎么记才不会乱呢?
唐伯虎
唐伯虎: 秋香姐莫愁!这正如 Go 语言中的数据类型。万物皆有归属,只要分类得当,管理起来自然井井有条。待小生为你一一理清这华府的“数据类型”。

📚 华府分类学大纲 (Go 类型总览)

Go 语言的类型系统非常严谨,主要分为基本类型派生类型。就像华府里有家丁、丫鬟(基本),也有管家、太师(复杂)。


一、 基本数据类型 (The Basics)

1. 布尔型 (Boolean) - 是非分明

唐伯虎
唐伯虎: 秋香姐,你心里有没有我?这就只有两个答案:true (有) 或 false (无)。

2. 数字类型 (Numeric) - 账房先生的算盘

数字是华府记账的核心。Go 提供了极其丰富的数字类型,以满足不同的精度需求。

分类 类型 描述 华府比喻
整型 (Integers)
整数,没有小数
int8, int16, int32, int64 有符号整数(可以欠债,负数) 普通家丁的月钱(可能是负的,如果打破了花瓶)
uint8, uint16, uint32, uint64 无符号整数(只能是正数) 华太师的寿命(只能增加)
特殊整型 int / uint 根据电脑系统决定大小 (32位或64位) 通用银票
浮点型 (Float)
小数
float32 单精度(约7位小数) 厨房称米的秤(大概准)
float64 (推荐) 双精度(约15位小数) 西洋进贡的天平(非常准)
复数 (Complex) complex64, complex128 实部 + 虚部 (a+bi) 祝枝山的谎言(虚虚实实)

3. 字符与字符串 - 笔墨纸砚

秋香
秋香: 那我想写诗,用什么类型呢?

二、 派生数据类型 (Advanced Types)

这些是进阶武功,后面章节会详细传授,但今日先列个名录:


三、 零值机制 (Zero Value) - 初始状态

在 Go 语言中,如果你声明了一个变量但没有赋值,它不会是垃圾值,而是有一个默认的“零值”。


🎯 练功房(慧眼识珠)

秋香的考题: 'A'"A" 有什么区别?'唐' 占多少个字节?

package main
import (
    "fmt"
    "unsafe"
)

func main() {
    var a = 'A' // rune (int32)
    var b = "A" // string
    var c = '唐' // rune

    fmt.Printf("'A' 的类型: %T\n", a)
    fmt.Printf("\"A\" 的类型: %T\n", b)
    fmt.Printf("'唐' 的大小: %d 字节 (因为它是int32)\n", unsafe.Sizeof(c))
    
    // 思考:字符串 "唐" 占几个字节?(UTF-8编码下通常是3个)
    fmt.Println(len("唐")) 
}

任务: 运行代码观察结果。'A' 是数字还是字符?

答案解析:

  1. 'A' (单引号) 是 rune (int32),在计算机里存储的是数字 65。
  2. "A" (双引号) 是 string,是一个字符序列。
  3. '唐'rune,占 4 个字节 (int32)。
  4. "唐" (字符串) 在 UTF-8 编码下通常占 3 个字节。

唐伯虎点拨: 单引号是“字”,双引号是“句”。字是数字,句是数组。