go20/day01/base_type
yumaojun03 243907d045 ```
docs(day01): 完善Go语言基础教程内容

- 添加指针概念章节,包含指针的基本概念、使用场景和示例代码
- 补充基础类型章节的零值说明,解释各种基础类型的默认值
- 扩展运算符章节,增加逻辑运算符和位运算符的详细说明
- 更新README目录结构,添加新章节的导航链接
- 添加指针相关的演示图表和示例代码文件
```
2025-12-28 17:26:05 +08:00
..
```
2025-12-28 14:53:22 +08:00
```
2025-12-28 17:26:05 +08:00

基础类型

在Go中所有变量都是有类型的, 比如前面的int, string, float32 这些, 因此在接下来我们将先讲解下Go的基础类型

静态: 变量值是有类型, 这个变量里面 只能放这个类型的值

go在语言成面定义了如下几种基础类型:

  • 整形 12345
  • 浮点型 123.45
  • 复数 123.45i
  • 字符 'a'
  • 字符串 "abc"
  • 布尔类型 true, false
  • 枚举类型 iota
  • 自定义类型

字面量(值)

字面量是值的表示方法,常用与对变量/常量进行初始化,主要分为:

  • 标识基础数据类型值的字面量例如0, 1.1, true, 3 + 4i, 'a', "我爱中国"
  • 构造自定义的复合数据类型的类型字面量例如type Interval int
  • 用于表示符合数据类型值的复合字面量,用来构造 array、slice、map、struct 的值, 例如:{1, 2, 3}

整形(整数)

var age = 99
类型名 字节宽度 取值范围
int 与平台有关 32 位系统 4 字节64 位系统 8 字节 有符号整型
uint 与平台有关 32 位 系统 4 字节64 位 系统 8 字节 无符号整形
int8 1 字节 用 8 位表示的有符号整型 取值范围为:[-128, 127]
int16 2 字节 用 16 位表示的有符号整型 取值范围为:[-32768,32767]
int32 4 字节 用 32 位表示的有符号整型,取值范围为:[-2147483648,2147483647]
int64 8 字节 用 64 位表示的有符号整型,取值范围为:[-9223372036854775808,9223372036854775807]
uint8 1 字节 用 8 位表示的无符号整型,取值范围为:[0,255]
uint16 2 字节 用 16 位表示的无符号整型,取值范围为:[0,65535]
uint32 4 字节 用 32 位表示的无符号整型,取值范围为:[0,4294967295]
uint64 8 字节 用 64 位表示的无符号整型,取值范围为:[0,18446744073709551615]
uintptr 与平台有关 32 位系统 4 字节64 位系统 8 字节指针值的无符号整型

浮点(小数)

var score = 99.5
类型名 字节宽度 取值范围
float32 4字节 IEEE-754 32位浮点型数
float64 8字节 IEEE-754 64位浮点型数
complex64 8字节 由两个 float32 组成的复数(实部+虚部)
complex128 16字节 由两个 float64 组成的复数(实部+虚部)

别名

a := []byte{}

// %+v 打印结构体字段名
// []
fmt.Printf("%+v \n", a)

// 字符采用unicode编码, 这里的 值得这个字符串编码是 97
b := 'a'
fmt.Printf("%+v", b)
// 用于描述字节, []byte{}, 就是字节流
// byte is an alias for uint8 and is equivalent to uint8 in all ways. It is
// used, by convention, to distinguish byte values from 8-bit unsigned
// integer values.
type byte = uint8

// rune is an alias for int32 and is equivalent to int32 in all ways. It is
// used, by convention, to distinguish character values from integer values.
type rune = int32
类型名 字节宽度 取值范围
byte 1 字节 字节类型,取值范围同 uint8
rune 4 字节 Unicode 码点 取值范围同 uint32

字符串类型

name := "bob"

Go 语言内置了字符串类型,使用 string 表示

字面量:

  • 可解析字符串:通过双引号(")来创建,不能包含多行,支持特殊字符转义序列
  • 原生字符串:通过反引号(`)来创建,可包含多行,不支持特殊字符转义序列

特殊字符:

  • \:反斜线
  • ':单引号
  • ":双引号
  • \a响铃
  • \b退格
  • \f换页
  • \n换行
  • \r回车
  • \t制表符
  • \v垂直制表符
  • \ooo3 个 8 位数字给定的八进制码点的 Unicode 字符(不能超过\377
  • \uhhhh4 个 16 位数字给定的十六进制码点的 Unicode 字符
  • \Uhhhhhhhh8 个 32 位数字给定的十六进制码点的 Unicode 字符
  • \xhh2 个 8 位数字给定的十六进制码点的 Unicode 字符

布尔类型

布尔类型用于表示真假,类型名为 bool只有两个值 true 和 false占用一个字节宽度零值为 false

var (
    IsBoy  = true
    IsGirl = true
)

// if IsBoy {}

自定义类型与枚举类型

在 go 语言中使用 type 声明一种新的类型,语法格式为: type TypeName Formatter

比如我们可以定义自己

type Gender string

常使用 iota 生成器用于初始化一系列相同规则的常量,批量声明常量的第一个常量使用 iota 进行赋值,此时 iota 被重置为 0其他常量省略类型和赋值在每初始化一个常量则 加 1

// 自定义类型
type Status string

const (
	// 自定义类型的值,常量不允许修改, 充当枚举(可选项)
	STATUS_ONLINE  Status = "online"
	STATUS_OFFLINE Status = "offline"
	STATUS_UNKNOW  Status = "unknow"
)

零值

所有的基础类型,没有被赋值都有一个 零值: 整数:0 小数:0 bool: false