【Go - 常见的5类循环】

在 Go 语言中,循环主要通过 for 关键字来实现。Go 中没有 whiledo-while 循环,但可以通过不同形式的 for 循环来实现相同的功能。以下是 Go 中几种常见的 for 循环用法:

1. 传统的 for 循环

类似于其他编程语言中的 for 循环,可以指定初始化语句、条件语句和后置语句。

package main

import "fmt"

func main() {
    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }
}

2. 条件循环

如果省略初始化语句和后置语句,for 循环就类似于其他语言中的 while 循环。

package main

import "fmt"

func main() {
    i := 0
    for i < 10 {
        fmt.Println(i)
        i++
    }
}

3. 无限循环

如果省略所有的三个部分,for 循环就会成为一个无限循环,通常与 break 语句一起使用来跳出循环。

package main

import "fmt"

func main() {
    i := 0
    for {
        if i >= 10 {
            break
        }
        fmt.Println(i)
        i++
    }
}

4. for range 循环

for range 循环用于迭代数组、切片、映射、字符串或通道。它提供了索引和值的迭代。

迭代数组或切片

package main

import "fmt"

func main() {
    arr := []int{1, 2, 3, 4, 5}
    for index, value := range arr {
        fmt.Printf("Index: %d, Value: %d\\n", index, value)
    }
}

迭代映射

package main

import "fmt"

func main() {
    m := map[string]int{"a": 1, "b": 2, "c": 3}
    for key, value := range m {
        fmt.Printf("Key: %s, Value: %d\\n", key, value)
    }
}

迭代字符串

package main

import "fmt"

func main() {
    s := "hello"
    for index, char := range s {
        fmt.Printf("Index: %d, Char: %c\\n", index, char)
    }
}

5. for 循环与通道

在遍历通道时,for range 循环会在通道关闭后自动终止。

package main

import "fmt"

func main() {
    ch := make(chan int)

    go func() {
        for i := 0; i < 5; i++ {
            ch <- i
        }
        close(ch)
    }()

    for value := range ch {
        fmt.Println(value)
    }
}

这其中也设计到协程,具体解释下,

  1. 创建一个整数类型的通道 ch。
  2. 使用 go func() { … }() 启动一个新的 goroutine 协程 并执行匿名函数。
  3. 在匿名函数中,将 0 到 4 的值依次发送到通道 ch,然后关闭通道。
  4. 主 goroutine 使用 for val := range ch 循环从通道 ch 中接收数据并打印出来。
  5. 当通道 ch 被关闭且所有数据都被接收后,for 循环结束。

以上是 Go 语言中几种常见的 for 循环的使用方法。根据不同的需求,可以选择适当的 for 循环形式来实现循环逻辑。

相关推荐

  1. Go - 常见5循环

    2024-07-11 18:32:06       26 阅读
  2. Go - 常见5函数用法】

    2024-07-11 18:32:06       21 阅读
  3. 常见循环结构

    2024-07-11 18:32:06       50 阅读
  4. 4.5 基于范围for循环

    2024-07-11 18:32:06       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 18:32:06       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 18:32:06       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 18:32:06       57 阅读
  4. Python语言-面向对象

    2024-07-11 18:32:06       68 阅读

热门阅读

  1. 二叉搜索树的最近公共祖先

    2024-07-11 18:32:06       23 阅读
  2. 基于单目摄像头实现的AR多人脸捕捉效果展示

    2024-07-11 18:32:06       18 阅读
  3. git 基本使用

    2024-07-11 18:32:06       22 阅读
  4. 【智能制造-15】常见通讯协议

    2024-07-11 18:32:06       22 阅读
  5. 网络编程学习part1

    2024-07-11 18:32:06       23 阅读
  6. IQN、UUID和SCSI-ID

    2024-07-11 18:32:06       22 阅读
  7. git撤销push

    2024-07-11 18:32:06       23 阅读
  8. 解决Spring Boot中的国际化与本地化问题

    2024-07-11 18:32:06       19 阅读
  9. Mongodb索引使用限制

    2024-07-11 18:32:06       25 阅读
  10. 数据建设实践之大数据平台(七)

    2024-07-11 18:32:06       25 阅读
  11. git revert怎么使用?

    2024-07-11 18:32:06       24 阅读