← Backend / Go / 基础专题

03_数据类型与零值

认识布尔、整数、浮点、字符串、数组、切片、映射及零值。

Go 基础专题 03:数据类型与零值

学习目标:认识布尔、整数、浮点、字符串、数组、切片、映射及零值。

核心知识

Go 是静态类型语言,变量的类型在编译时确定。基本类型包括 bool、有符号和无符号整数、float32/float64、complex64/complex128、string。byte 是 uint8 别名,rune 是 int32 别名。int 的位宽依目标平台而定,持久化协议应使用范围明确的类型。

package main

import "fmt"

func main() {
    var n int
    var ok bool
    var title string
    var items []int
    fmt.Printf("%d %t %q %v\n", n, ok, title, items)
}

未显式初始化时,数值零值是 0,布尔为 false,字符串为 "";指针、切片、映射、通道、函数与接口可为 nil。nil 切片可以 append,但向 nil 映射直接赋值会 panic,需先 make(map[string]int)。数组的长度是类型的一部分:[2]int 与 [3]int 是不同类型。

不能把整数直接当布尔条件:if n {} 无效,要写明确比较 if n != 0 {}。数值类型之间通常需要显式转换。零值有用,但业务上不能把“未设置”与合法的 0 混为一谈,可使用指针或额外布尔字段表达是否存在。

逐步理解

把每种类型的零值写在纸上,再用 %#v 打印验证。nil map 与空 map 读取结果相似,但写入行为不同;这正是“零值可读”不等于“零值可写”。int 用于本机计算,涉及持久化或跨平台协议时应明确宽度与范围。金额、计数和时间戳尤其要避免范围含糊。

动手练习

练习:声明未初始化的 int、bool、string 并打印。答案:依次是 0、false、空字符串。