Go 语言基础数据类型详解:布尔、数字与字符串
本文深入解析 Go 语言中最核心的基础数据类型,包括布尔型、整型、浮点型、复数以及字符串。文章不仅详细列出了各类数据的内存占用与取值范围,还通过具体的代码示例演示了声明方式、进制表示、字符编码差异(byte vs rune)以及常用标准库的调用方法,旨在帮助开发者构建扎实的 Go 语言编程基础。
结果与目标
掌握 Go 语言基础类型的使用规范,能够根据场景选择合适的数值类型以避免溢出或精度丢失,并能正确处理字符串中的多字节字符。
布尔型 (bool)
Go 语言的布尔型是最简单的数据类型,仅包含两个预定义常量:true 和 false。它在逻辑判断中占据核心地位。
第1步:布尔型声明与推断
目的:明确变量的布尔类型属性。
操作:可以使用关键字 bool 显式声明,也可以利用 Go 的类型推断机制自动识别。
// 显式声明
var t bool = true
var f bool = false
// 类型推断
var t = true
f := false
第2步:逻辑运算与条件控制
目的:利用布尔值控制程序流程。
操作:比较运算符(如 >=)和逻辑运算符(&&, ||)的结果均为布尔型,常用于 if 或 for 语句的判断条件。
if 3 > 2 {
fmt.Println("3 is greater than 2")
}
for i := 0; i < 10; i++ {
fmt.Println(i)
}
数字类型
Go 的数字类型主要分为整型、浮点型和复数三类。正确选择类型对内存使用和计算性能至关重要。
第1步:整型 (Integer)
目的:处理整数运算并了解不同精度的适用场景。
参数:整型分为有符号(signed)和无符号(unsigned),支持从 int8 到 int64 及对应的 uint 系列。特别地,int 和 uint 的长度取决于操作系统(32位或64位)。
| 名称 | 占用字节 | 取值范围 | 是否有符号 |
|---|---|---|---|
| int8 | 1 | -128 ~ 127 | 是 |
| int16 | 2 | -32768 ~ 32767 | 是 |
| int32 | 4 | -2147483648 ~ 2147483647 | 是 |
| int64 | 8 | -9223372036854775808 ~ 9223372036854775807 | 是 |
| int | 4/8 | 依平台而定 | 是 |
| uint8 | 1 | 0 ~ 255 | 否 |
| uint16 | 2 | 0 ~ 65535 | 否 |
| uint32 | 4 | 0 ~ 4294967295 | 否 |
| uint64 | 8 | 0 ~ 18446744073709551615 | 否 |
| uint | 4/8 | 依平台而定 | 否 |
第2步:进制的表示方法
目的:在代码中以不同格式编写整数。
操作:十进制无需前缀;八进制以 0 开头;十六进制以 0x 或 0X 开头。
n1 := 57 // 十进制
n2 := 071 // 八进制
n3 := 0x39 // 十六进制
第3步:字符与 UTF-8 编码处理
目的:理解 ASCII 字符与中文等多字节字符的差异。
入口:byte 和 rune 类型。
动作:byte 是 uint8 的别名,用于存储 ASCII 字符(如英文字母);rune 是 uint32 的别名,用于存储 UTF-8 字符(如中文汉字)。Go 源码默认采用 UTF-8 编码。
b := byte('c') // 输出: 99 (ASCII码)
r := rune('中') // 输出: 20013 (Unicode码点)
第4步:浮点型 (Floating Point)
目的:处理带小数点的数值。
参数:提供 float32 和 float64,遵循 IEEE 754 标准。
重要提示:float32 精度约 6 位,float64 精度约 15 位。在绝大多数场景下,建议优先使用 float64 以避免精度损失。
f32 := float32(1.88)
f64 := float64(2e3) // 等同于 2000
第5步:复数 (Complex)
目的:进行复数运算。
操作:Go 提供 complex64 和 complex128 两种精度。
完成状态:可通过 real() 和 imag() 提取实部与虚部,并使用 math/cmplx 包进行平方根等复杂数学运算。
x := complex(1, 2) // 等同于 1+2i
fmt.Println(real(x)) // 1
fmt.Println(imag(x)) // 2
字符串 (string)
字符串在 Go 中是不可变的字符序列,其底层由字节数组实现。正确使用字符串涉及编码识别、索引边界管理及标准库操作。
第1步:字符串声明与转义
目的:创建字符串并处理特殊字符。
动作:使用双引号 "..." 创建的字符串支持转义字符(如 \n 换行,\t 制表符);使用反引号 `...` 创建的原始字符串不支持转义,其中的字符将原样输出。
s1 := "test\n" // s1 包含换行符
s2 := `test\n` // s2 包含字面量 \n
第2步:索引访问与截断
目的:获取字符串的子串或特定字节。
风险提醒:由于 Go 字符串按字节寻址,索引操作的范围必须在 0 ≤ i < len(s) 之间。超出此范围将引发 panic: slice bounds out of range 或 index out of range 异常。
s := "this is string"
sub := s[0:1] // 安全截取
// s[100] 会导致程序崩溃
第3步:类型转换与拼接
目的:与其他数据类型交互。
操作:字符串可通过 []byte(s) 转为字节切片,再转回字符串进行拼接或修改(因不可变,通常生成新副本)。数字与字符串互转需使用 strconv 包,而常规大小写转换及查询则使用 strings 包。
// 字符串拼接
res := "hello" + "world"
// 与 []byte 互转
b := []byte("test")
s := string(b)
// 数字转换
str := strconv.Itoa(123) // 123
num, err := strconv.Atoi("123") // 123
简要总结
Go 语言的基础数据类型虽然分类清晰,但在使用时需注意细节:例如浮点数推荐优先使用 float64,处理中文字符应使用 rune 而非 byte,以及在进行字符串索引时严防越界。扎实掌握这些基础规范,是编写高效、稳定 Go 程序的前提。
以上就是 Go 语言基础数据类型详解的详细内容,更多关于 Go 语言数据类型学习的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









