Go语言基础:String、Slice与Map核心操作指南

Ada
Ada
发布时间:2026-10-16| 2人浏览过
原创

深入解析 Go 语言中 String、Slice 和 Map 的核心特性与操作技巧。本文提供从基础声明到高级应用(如字节缓冲拼接、切片截取、Map 遍历)的代码示例,涵盖 strings、strconv 等标准库函数的使用场景,助力开发者高效处理文本、动态数组及键值对数据。

1. 字符串 String 的基础操作

String 是 Go 语言中的不可变类型。在初始化后,字符串的值无法直接修改,它本质上是一串固定长度的字节序列。虽然不可变,但字符串可以作为字节的切片 (Slice) 进行读取和处理。

第1步:获取字符串长度

使用 len() 函数可以获取字符串的字节长度。需要注意的是,对于包含多字节字符(如中文或 Emoji)的字符串,len() 返回的是字节数而非字符数。

str1 := "hello world"
fmt.Println(len(str1)) // 输出: 11,因为空格也被计入

第2步:遍历字符串

Go 提供两种遍历方式,分别适用于 ASCII 纯英文环境和 Unicode 多语言环境:

  • 基于索引遍历:直接通过下标访问,适合纯英文字符。
str := "hello"
for i := 0; i < len(str); i++ {
    fmt.Printf("Index: %d, Byte: %c\n", i, str[i])
}
  • 基于 Range 遍历:推荐使用 range,它可以正确分解 UTF-8 字符,返回索引和对应的 rune (Unicode 码位)。
str := "你好"
for i, ch := range str {
    fmt.Printf("Index: %d, Char: %c\n", i, ch)
}

第3步:字符串的高效拼接

由于字符串不可变,直接循环拼接会产生大量临时对象。推荐使用 strings.Builder 进行高效拼接:

import "strings"

func main() {
    str1 := "Hello "
    str2 := "World"
    
    var sb strings.Builder
    sb.WriteString(str1)
    sb.WriteString(str2)
    
    result := sb.String()
    fmt.Println(result) // Hello World
}

第4步:使用标准库简化处理

Go 提供了丰富的包来处理字符串:strings 包用于内容操作,strconv 包用于类型转换。

  • strings 包常用函数:
    • Index(s, substr string): 查找子串索引。
    • Contains(s, substr string): 判断是否包含子串。
    • Join(a []string, sep string): 将字符串切片连接成新字符串。
    • Replace(s, old, new string, n int): 替换子串,n<0 表示全部替换。
  • strconv 包:
    • Append(...): 将数字转换为字符串追加到字节切片后。
    • Format(...): 将其他类型格式化为字符串。
    • Parse(...): 将字符串解析为整数、浮点数等基础类型。

2. 动态数组 Slice 的使用

Slice (切片) 是对底层数组的动态视图,解决了 Go 原生数组长度固定的限制。Slice 本身不包含数据,只是指向数组的一个结构体(包含指针、长度和容量)。

第1步:声明与创建 Slice

可以通过字面量定义或使用 make 函数创建:

// 字面量方式
slice1 := []int{1, 2, 3}

// make 函数创建,指定长度和可选容量
slice2 := make([]int, 5, 10) // 长度5,容量10

第2步:Slice 的截取与引用特性

Slice 截取通过 [low:high] 语法进行,结果为左闭右开区间。截取出的 Slice 仍与原数组共享数据:

numbers := []int{0, 1, 2, 3, 4, 5}

sub1 := numbers[1:4] // 结果为 [1, 2, 3]
sub2 := numbers[:3]  // 默认 low=0, 结果为 [0, 1, 2]

3. 键值集合 Map 的入门

Map 是无序的键值对集合,用于快速检索数据。键必须支持比较运算(如 string, int)。

第1步:声明与初始化

// 声明未初始化的 map (nil,使用前需 make)
var m1 map[string]int

// 直接初始化
m2 := map[string]int{"a": 1, "b": 2}

// 使用 make 创建
m3 := make(map[string]string)

第2步:增删改查与遍历

可以直接通过 key = value 赋值,也可以通过 range 遍历所有键值对:

capitals := make(map[string]string)
capitals["France"] = "Paris"
capitals["Japan"] = "Tokyo"

// 遍历
for country, capital := range capitals {
    fmt.Printf("Capital of %s is %s\n", country, capital)
}

以上就是 Go 语言基础类型 String、Slice 和 Map 操作的详细内容,更多关于 Go 语言数据结构进阶的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。