文章目录

Go 数据类型:int、string、bool、slice、map

发布于 2026-04-06 18:47:35 · 浏览 11 次 · 评论 0 条

Go 数据类型:int、string、bool、slice、map

阶段一:声明与操作基础值类型

  1. 创建 测试文件。打开任意代码编辑器,新建名为 main.go 的纯文本文件,并在首行精确键入 package main 以标记该文件为可执行程序入口。

  2. 定义 int 整型变量。在 main 函数体内使用 var 关键字配合类型标识进行显式声明,或直接使用 := 简写语法,让编译器根据右侧数值自动匹配底层整数精度。

    var port int = 8080
    timeout := 30
  3. 定义 bool 布尔变量。该类型仅承载逻辑真或假两种状态,配置功能开关或流程条件时,直接赋予 true(真)或 false(假)字面量。

    var debugMode bool = false
    isConnected := true
  4. 定义 string 字符串变量。使用英文双引号 "" 包裹任意文本序列。字符串在 Go 中属于不可变结构,修改内容时会触发底层内存复制并生成全新实例。

    var appName string = "DataSync"
    version := "1.0.0"
  5. 执行 显式类型转换。Go 语言采用强类型校验,禁止不同基础类型直接混合运算。遇到类型冲突时,调用 目标类型(源变量) 语法完成强制对齐。

    import "strconv"
    // 将整数转为字符串
    portStr := strconv.Itoa(8080)
    // 将字符串转为整数
    maxVal, err := strconv.Atoi("50")

阶段二:构建与遍历动态引用类型

  1. 初始化 slice 切片。切片是动态数组,调用 make 函数分配底层存储空间。依次传入元素类型、初始可见长度与底层最大容量,长度限制当前可索引范围,容量决定底层扩容阈值。

    // 创建长度 0,容量 10 的字符串切片
    queue := make([]string, 0, 10)
  2. 追加 元素至切片。调用内置 append 函数写入新数据。该操作可能触发底层数组迁移并返回全新切片引用,必须将函数返回值重新赋值给原变量,否则新增数据会丢失。

    queue = append(queue, "task_A")
    queue = append(queue, "task_B", "task_C")
  3. 截取 切片范围。使用 [start:end] 闭开区间语法提取子序列。该操作不复制底层数据,而是共享原数组指针,修改子切片会直接影响原始切片内容。

    activePart := queue[0:2]
  4. 构建 map 映射。映射采用哈希算法实现无序键值对存储。创建时必须通过 make 或字面量语法完成内存初始化,未初始化的 nil 映射在写入键值时将直接引发运行时崩溃。

    config := make(map[string]int)
    config["retries"] = 3
  5. 安全查询 键值对。使用 value, exists := map[key] 双返回值语法读取数据。第二个返回值 exists 为布尔类型,校验其状态可精准区分“键存在但值为零”与“键不存在”的差异。

    val, ok := config["timeout"]
    if !ok {
        val = 5 // 键缺失时注入安全默认值
    }
  6. 遍历 集合数据。使用 for key, value := range collection 循环结构轮询元素。遍历 slice 时依次产出索引下标与对应数值,遍历 map 时产出键名与对应值,遍历顺序由底层哈希结构决定,不保证固定。

    for idx, item := range queue {
        fmt.Printf("Index: %d, Value: %s\n", idx, item)
    }

阶段三:集成验证与类型规则对照

  1. 整合 完整逻辑。将上述声明、操作与校验步骤组合至单一 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)
        }
    }
  2. 保存 并切换终端目录。在文件管理器或终端中使用 cd 命令导航至 main.go 所在路径,检查环境依赖。

    go version
  3. 执行 编译运行。输入 go run main.go 启动即时编译并查看标准输出。核对终端打印文本是否与代码逻辑完全吻合。

  4. 核对 核心机制。对照下表明确各类型底层行为,规划数据选型策略以避免不必要的内存拷贝或空指针异常。

数据类型 底层存储结构 零值默认表现 内存分配与扩容机制 典型适用场景
int 直接存储整数位 0 栈内存静态分配<br>不涉及动态扩容 循环计数器、状态码返回
string 指针+长度结构体 空字符串 "" 编译期常量或堆分配<br>任何修改触发完整复制 接口报文、日志记录
bool 单字节标志位 false 栈内存静态分配<br>无扩容机制 开关控制、条件分支
slice 数组头结构体<br>(指针、长度、容量) nil 堆分配底层数组<br>容量满时自动 1.x 倍扩容 动态数据队列、批量处理
map 哈希表运行时指针 nil 堆分配桶数组<br>元素超阈值自动分裂桶 快速检索字典、配置缓存
  1. 排查 典型编译报错。若终端输出 panic: assignment to entry in nil map,说明跳过了初始化步骤,回溯代码确认 make 调用路径。若提示 cannot use 5 (type int) as type string in assignment,说明类型不匹配,替换赋值右侧数据或补全 strconv 转换逻辑。

评论 (0)

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

扫一扫,手机查看

扫描上方二维码,在手机上查看本文