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、空字符串。