Go 数据类型:int、string、bool、slice、map
阶段一:声明与操作基础值类型
-
创建 测试文件。打开任意代码编辑器,新建名为
main.go的纯文本文件,并在首行精确键入package main以标记该文件为可执行程序入口。 -
定义
int整型变量。在main函数体内使用var关键字配合类型标识进行显式声明,或直接使用:=简写语法,让编译器根据右侧数值自动匹配底层整数精度。var port int = 8080 timeout := 30 -
定义
bool布尔变量。该类型仅承载逻辑真或假两种状态,配置功能开关或流程条件时,直接赋予true(真)或false(假)字面量。var debugMode bool = false isConnected := true -
定义
string字符串变量。使用英文双引号""包裹任意文本序列。字符串在 Go 中属于不可变结构,修改内容时会触发底层内存复制并生成全新实例。var appName string = "DataSync" version := "1.0.0" -
执行 显式类型转换。Go 语言采用强类型校验,禁止不同基础类型直接混合运算。遇到类型冲突时,调用
目标类型(源变量)语法完成强制对齐。import "strconv" // 将整数转为字符串 portStr := strconv.Itoa(8080) // 将字符串转为整数 maxVal, err := strconv.Atoi("50")
阶段二:构建与遍历动态引用类型
-
初始化
slice切片。切片是动态数组,调用make函数分配底层存储空间。依次传入元素类型、初始可见长度与底层最大容量,长度限制当前可索引范围,容量决定底层扩容阈值。// 创建长度 0,容量 10 的字符串切片 queue := make([]string, 0, 10) -
追加 元素至切片。调用内置
append函数写入新数据。该操作可能触发底层数组迁移并返回全新切片引用,必须将函数返回值重新赋值给原变量,否则新增数据会丢失。queue = append(queue, "task_A") queue = append(queue, "task_B", "task_C") -
截取 切片范围。使用
[start:end]闭开区间语法提取子序列。该操作不复制底层数据,而是共享原数组指针,修改子切片会直接影响原始切片内容。activePart := queue[0:2] -
构建
map映射。映射采用哈希算法实现无序键值对存储。创建时必须通过make或字面量语法完成内存初始化,未初始化的nil映射在写入键值时将直接引发运行时崩溃。config := make(map[string]int) config["retries"] = 3 -
安全查询 键值对。使用
value, exists := map[key]双返回值语法读取数据。第二个返回值exists为布尔类型,校验其状态可精准区分“键存在但值为零”与“键不存在”的差异。val, ok := config["timeout"] if !ok { val = 5 // 键缺失时注入安全默认值 } -
遍历 集合数据。使用
for key, value := range collection循环结构轮询元素。遍历slice时依次产出索引下标与对应数值,遍历map时产出键名与对应值,遍历顺序由底层哈希结构决定,不保证固定。for idx, item := range queue { fmt.Printf("Index: %d, Value: %s\n", idx, item) }
阶段三:集成验证与类型规则对照
-
整合 完整逻辑。将上述声明、操作与校验步骤组合至单一
main函数作用域,确保变量命名不冲突且生命周期覆盖整个执行流程。package main import ( "fmt" "strconv" ) func main() { port := 8080 msg := "Listening on " + strconv.Itoa(port) fmt.Println(msg) tasks := []string{} tasks = append(tasks, "sync_db", "clear_cache") fmt.Println("First task:", tasks[0]) env := map[string]string{"region": "us-east-1"} loc, found := env["region"] if found { fmt.Println("Deploy to:", loc) } } -
保存 并切换终端目录。在文件管理器或终端中使用
cd命令导航至main.go所在路径,检查环境依赖。go version -
执行 编译运行。输入
go run main.go启动即时编译并查看标准输出。核对终端打印文本是否与代码逻辑完全吻合。 -
核对 核心机制。对照下表明确各类型底层行为,规划数据选型策略以避免不必要的内存拷贝或空指针异常。
| 数据类型 | 底层存储结构 | 零值默认表现 | 内存分配与扩容机制 | 典型适用场景 |
|---|---|---|---|---|
int |
直接存储整数位 | 0 |
栈内存静态分配<br>不涉及动态扩容 | 循环计数器、状态码返回 |
string |
指针+长度结构体 | 空字符串 "" |
编译期常量或堆分配<br>任何修改触发完整复制 | 接口报文、日志记录 |
bool |
单字节标志位 | false |
栈内存静态分配<br>无扩容机制 | 开关控制、条件分支 |
slice |
数组头结构体<br>(指针、长度、容量) | nil |
堆分配底层数组<br>容量满时自动 1.x 倍扩容 | 动态数据队列、批量处理 |
map |
哈希表运行时指针 | nil |
堆分配桶数组<br>元素超阈值自动分裂桶 | 快速检索字典、配置缓存 |
- 排查 典型编译报错。若终端输出
panic: assignment to entry in nil map,说明跳过了初始化步骤,回溯代码确认make调用路径。若提示cannot use 5 (type int) as type string in assignment,说明类型不匹配,替换赋值右侧数据或补全strconv转换逻辑。

暂无评论,快来抢沙发吧!