Go语言for循环语句详解:语法、用法与常见陷阱

江屿
江屿
发布时间:2026-10-16| 6人浏览过
原创

Go语言仅提供 for 这一种循环控制结构,它灵活且强大,能够替代传统编程中的 while、do-while 等多种循环模式。本文将深入讲解 for 循环的四种核心语法形式,并通过文件读取、乘法口诀表打印以及中英文本遍历等实战案例,帮助开发者掌握其正确用法及处理中文乱码等常见陷阱。

for 循环的核心语法结构

在 Go 语言中,for 是执行重复任务的唯一方式。根据业务需求的不同,其语法结构主要分为以下四种形式:

第1步:使用完整语法的标准循环

这是最常见的写法,包含初始化、条件和迭代三个部分,常用于需要明确知道循环次数或索引的场景。

for 初始语句; 条件语句; 迭代后语句 {
    // 循环体逻辑
}

第2步:使用条件判断的简化写法

仅保留条件表达式,分号可省略。这通常用于“当...时”的逻辑场景,等同于传统语言的 while 循环。

for 条件语句 {
    // 循环体逻辑
}

第3步:无限死循环

若完全省略大括号内的内容,将构成无限循环。此时必须在循环体内使用 break 语句来安全退出,否则程序将一直运行直至终止。

for {
    // 无限循环体
}

第4步:使用 range 进行范围遍历

针对集合数据(如数组、切片、Map、字符串等),可以使用 range 关键字自动获取索引/键和对应的值/字符,极大提升了代码的可读性。

for key, value := range 表达式/变量 {
    // 遍历处理逻辑
}

实际应用场景示例

场景一:利用死循环读取文件内容

在处理不确定行数的文件流时,常采用死循环结合 EOF(End of File)判断的方式。这种模式能有效处理逐行读取的任务。

func readFile() {
	//需导入 bufio、io、os 包
	f, err := os.Open("abc.txt")
	if err != nil {
		fmt.Println("open error")
		return
	}
	defer f.Close()

	br := bufio.NewReader(f)
	for {
		s, _, c := br.ReadLine()
		if c == io.EOF {
			break // 到达文件末尾跳出循环
		}
		fmt.Println(string(s))
	}
}

场景二:嵌套 for 循环打印乘法表

通过双层 for 循环可以清晰地展示行列逻辑,适用于生成表格类数据。

for i := 1; i < 10; i++ {
	for j := 1; j <= i; j++ {
		fmt.Printf("%dx%d=%d ", j, i, i*j)
	}
	fmt.Println("") // 换行
}

进阶注意事项:字符串遍历的陷阱

初学者在使用 for 遍历字符串时容易遇到中文字符显示乱码的问题。这是因为 Go 的字符串底层由 UTF-8 字节序列组成,直接使用 []byte 类型的索引访问非 ASCII 字符会导致截断或乱码。

方法 A:直接遍历字节(仅适合纯英文/数字)

对于 ASCII 字符集,按字节访问是正确的做法:

var str = "Hello world!"
for i := 0; i < len(str); i++ {
	fmt.Printf("str[%d]=%c\n", i, str[i])
}

方法 B:转换为 rune 类型处理中文

若涉及中文等多字节字符,需先将其转换为 []rune 切片。在 Go 中,rune 相当于其他语言中的 char,代表一个 Unicode 码点。

var str = "Hello 北京"
str2 := []rune(str) // 强制转换为 rune 切片
for i := 0; i < len(str2); i++ {
	fmt.Printf("str[%d]=%c\n", i, str2[i])
}

关键避坑指南

  • 花括号不可省: 即使是单行逻辑,for 循环体也必须用 { } 包裹,不同于 if 的单行可选特性。
  • 分号的灵活性: 如果只保留了条件表达式,初始化语句和后置语句旁边的分号可以全部省略,使代码更接近自然语言。
  • 中文处理原则: 只要是涉及可读字符(非纯字节计算)的场景,建议优先使用 range 遍历字符串,或者手动转换 []rune。

以上就是Go语言基础for循环语句的用法及示例详解的详细内容,更多关于Go语言for循环语句的资料请关注本站其它相关文章!

相关标签:

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

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 算法库。