

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

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

byte): 其实是 uint8 的别名。用于表示 ASCII 字符(比如英文 'A')。rune): 其实是 int32 的别名。用于表示 Unicode 字符(比如中文 '唐')。重点:处理中文必须用 rune!string): 一串字符的集合。
name := "唐伯虎" // string
firstChar := '唐' // rune (注意单引号)
这些是进阶武功,后面章节会详细传授,但今日先列个名录:
&tang - 指向唐伯虎的门牌号(内存地址)。[4]string - 四大才子(固定人数)。[]string - 华府的家丁队伍(人数可变)。map[string]int - 借债记录本(名字 -> 金额)。type Person struct {} - 定义一个人的档案。chan int - 传声筒(并发通信)。func - 具体的武功招式。interface - 只要会武功的都算一类。在 Go 语言中,如果你声明了一个变量但没有赋值,它不会是垃圾值,而是有一个默认的“零值”。
int 默认为 0float 默认为 0.0bool 默认为 falsestring 默认为 "" (空字符串)nil (空)秋香的考题: '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' 是数字还是字符?
答案解析:
'A' (单引号) 是 rune (int32),在计算机里存储的是数字 65。"A" (双引号) 是 string,是一个字符序列。'唐' 是 rune,占 4 个字节 (int32)。"唐" (字符串) 在 UTF-8 编码下通常占 3 个字节。唐伯虎点拨: 单引号是“字”,双引号是“句”。字是数字,句是数组。