跳到主要内容

Go 语言基础类型

Go 语言之所以看起来基础类型(Basic Types)特别多,是因为它是一门强类型且对内存控制很精确的语言。

但其实你不需要死记硬背每一个。我们可以把它们归纳为四大类。只要掌握了核心逻辑,剩下的都是变体。

1. 布尔型 (Boolean)

最简单的一种,只有真和假。

  • 类型关键字: bool
  • 值: truefalse
  • 注意: Go 语言中,布尔值不能和 0 或 1 相互转换(这和 C 语言或 Python 不同)。

2. 字符串 (String)

Go 的字符串处理非常强大,默认支持 UTF-8(也就是说直接支持中文)。

  • 类型关键字: string
  • 特点: 一旦创建,内容不可变。

3. 数字类型 (Numeric Types)

这是让你感觉"多"的罪魁祸首。Go 把数字拆分得很细,是为了在系统编程中节省内存。

A. 整数 (Integers)

分为有符号(正负数)和无符号(只有正数,Unsigned)。

类型描述常用场景
int最常用。根据系统是32位还是64位自动变化。90% 的情况用它
int8, int16, int32, int64固定大小的整数(8位到64位)。处理底层协议、文件格式或大数
uint无符号整数,类似 int 但不能为负。位运算、特定算法
uint8, uint16, uint32, uint64固定大小的无符号整数。同上

B. 浮点数 (Floating Point)

也就是小数。

  • float32: 精度较低。
  • float64: 最常用。精度高,Go 的数学库默认都用这个。

C. 复数 (Complex)

用于科学计算,一般业务开发很少用到。

  • complex64, complex128

4. 两个极其重要的"别名"

Go 有两个特殊的类型名字,经常看到,一定要记住它们代表什么:

byte

  • 其实就是 uint8
  • 用途: 用来处理原始数据(如文件流、网络传输)、ASCII 字符。

rune

  • 其实就是 int32
  • 用途: 代表一个 Unicode 字符
  • 为什么重要? 因为中文字符在 UTF-8 中占 3 个字节,用 byte 存不下,必须用 rune 来存单独的一个汉字。

极简生存指南:我该用哪个?

虽然有这么多类型,但在普通的业务代码(Web 开发、工具脚本)中,你只需要记住以下 4 个黄金标准 就够了:

  1. 是整数?用 int
  2. 是小数?用 float64
  3. 是真假?用 bool
  4. 是文字?用 string

只有当你明确知道"我需要处理二进制流"或者"我要做一个对内存极其敏感的嵌入式程序"时,才去考虑那些 int8uint32 之类的类型。

特别补充:零值 (Zero Value)

Go 有一个很棒的特性:所有变量被声明时,都会自动有一个默认值(不会像 C 语言那样是随机垃圾值)。

  • int / float 默认为 0
  • bool 默认为 false
  • string 默认为 "" (空字符串)

代码示例

package main

import "fmt"

func main() {
var a int // 默认为 0
var b string // 默认为 ""
var c bool // 默认为 false

// 这里用到了 rune (int32) 来打印汉字
var d rune = '好'

fmt.Printf("a: %d, b: %q, c: %v, d: %c\n", a, b, c, d)
}