Golang循环语句使用技巧

在Golang中,for循环和range语句有哪些实用的使用技巧?比如如何优化循环性能、避免常见陷阱,或者有哪些优雅的写法可以简化代码?希望能分享一些实际项目中的经验案例。

2 回复

Golang循环主要有for和range。for可替代while,支持break、continue控制。range适合遍历数组、切片、map。避免无限循环,注意goroutine中的循环变量捕获问题。

更多关于Golang循环语句使用技巧的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Golang中,循环主要通过for语句实现,没有whiledo-while。以下是常见使用技巧和示例:


1. 基础循环

for i := 0; i < 5; i++ {
    fmt.Println(i)
}

2. 类似 while 的循环

省略初始化和后置语句:

count := 5
for count > 0 {
    fmt.Println(count)
    count--
}

3. 无限循环

直接省略条件:

for {
    fmt.Println("无限执行")
    // 通过 break 退出
    break
}

4. 遍历数组/切片

nums := []int{1, 2, 3}
for index, value := range nums {
    fmt.Printf("索引:%d 值:%d\n", index, value)
}

5. 遍历字符串

str := "hello"
for i, ch := range str {
    fmt.Printf("字符:%c 位置:%d\n", ch, i)
}

6. 遍历 map

m := map[string]int{"a": 1, "b": 2}
for key, value := range m {
    fmt.Printf("键:%s 值:%d\n", key, value)
}

7. 跳过与中断

  • continue:跳过当前迭代
  • break:立即退出循环
for i := 0; i < 10; i++ {
    if i%2 == 0 {
        continue // 跳过偶数
    }
    if i > 5 {
        break // 大于5时退出
    }
    fmt.Println(i)
}

8. 标签跳出嵌套循环

使用标签直接跳出多层循环:

OuterLoop:
for i := 0; i < 3; i++ {
    for j := 0; j < 3; j++ {
        if i*j == 4 {
            break OuterLoop
        }
        fmt.Println(i, j)
    }
}

9. 循环中使用 defer

注意:defer在循环结束时才执行,可能引发资源问题,建议封装成函数:

for _, file := range files {
    func(f string) {
        fh, _ := os.Open(f)
        defer fh.Close() // 在每次迭代结束时执行
        // 处理文件
    }(file)
}

10. 性能优化

  • 遍历切片时,若只需索引,可省略值:
    for i := range slice {
        // 使用 slice[i]
    }
    
  • 避免在循环内频繁分配内存(如拼接字符串改用 strings.Builder)。

灵活运用这些技巧能提升代码效率和可读性。根据场景选择合适的循环方式,并注意资源管理和性能细节。

回到顶部