go之for循环

本文详细介绍了Go语言中的循环结构,包括基于计数器的迭代、基于条件判断的迭代、无限循环及for-range语法,并通过具体实例展示了不同循环的应用场景。此外还讲解了break与continue语句的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基于计数器的迭代

  • 格式
for 初始化语句; 条件语句; 修饰语句{}
  • 实例
package main

import "fmt"

func main(){
    for i:=0;i<10;i++{
        fmt.Print(i)
    }
    fmt.Println()
    /*
    执行步骤:
        1、 初始化,条件判断,条件成立执行循环体,不成立结束for循环
        2、条件成立执行循环体,i++,条件判断
        3、条件成立执行循环体,i++,条件判断
        4、...
        5、条件不成立结束循环体
    */
    
    // 求 100 以内偶数之和
    var sum int = 0
    for i:=0;i <= 100;i++{
        if i%2 == 0{  // 取余为0 则为偶
            sum += i
        }
    }
    fmt.Println(sum)

    // 99乘法表
    for i:=1;i<10;i++{
        for j:=1 ;j<=i;j++{
            fmt.Printf("%d * %d = %d ",j,i,j*i)
        }
        fmt.Println("")
    }
}

0123456789

二、基于条件判断的迭代

  • 格式
for 条件语句{}
  • 实例
package main

import "fmt"

func main(){
    // 求 100以内 奇数之和
    var sum,i int // 多相同类型变量声明
    i = 0
    for i<=100{
        if i % 2 != 0{
            sum += i
        }
        i++
    }
    fmt.Println(sum)


    // 也可以这样
    var sum1,j int
    j = 0
    for true{ // 条件永远为 true
        if j % 2 != 0{
            sum1 += j
        }
        j++
        if j > 100{
            break // 中断当前循环,或跳出当前循环体
        }
    }
    fmt.Println(sum1)
}

三、无限循环

  • 格式
for{}
// 与 for true {},行为是一样的
// 
  • 实例
package main

import "fmt"

func main(){
    // 输入内容并打印在终端
    var content string
    for {
        fmt.Print("请输入内容:")
        fmt.Scanf("%s\n",&content) // &content 是content的内存地址
        fmt.Println("你输入的内容是:",content)
    }
}

四、for-range语法

  • 格式
    这是 Go 特有的一种的迭代结构,您会发现它在许多情况下都非常有用。它可以迭代任何一个集合(包括数组和 map,详见第 7 和 8 章)。语法上很类似其它语言中 foreach 语句,但您依旧可以获得每次迭代所对应的索引
for ix, val := range coll { }
  • 实例
package main

import (
    "fmt"
)

func main(){
    str := "jmz is good man"
    for index,v := range str{
        // v 是 rune 类型,所以需要转化成string 类型
        fmt.Println(index , " - " , string(v))
    }

    str1:= "from 中国"
    for _,v := range str1{ // _ 省略 第一个返回参数
        fmt.Println(v, " - ", string(v))
    }

    // 关于rune类型  一个字符串是unicode编码的字符。
    // 下面的结果处理与上面的一样
    value := []rune(str1) // 切片类型 ,将str1 转成切片类型
    i := 0
    for i<len(value){
        fmt.Println(string(value[i]))
        i++
    }
}
  • 统计字符中相同字符的个数
package main

import "fmt"

func main(){
    str := "上海自来水来自海上,are you know?hahahah"
    count := make(map[string]int) // map 类型(引用类型)
    /*
    // count := make(map[string]int) 相当于:
    var count map[string]int
    count = make(map[string]int)
    // 后面会着重讲解
     */
    for _,v := range str{
        count[string(v)] += 1 // 将rune 转化成string :   string(v)
    }
    for k,v := range count{ // map 类型也可以for-range
        fmt.Println(k," - ",v)
    }
}

五、Break 与 continue

  • 解释
break: 跳出当前循环体(结束循环体)
continue: 跳过本次循环,进入下一次循环
  • 实例
package main

import "fmt"

func main(){
    for i:= 0;i<10;i++{
        if i == 3{
            continue
        }
        if i == 6{
            break
        }
        fmt.Println(i)
    }
}
输出结果:
0
1
2
4
5

猜猜结果

  • 猜猜一
for i:=0;i<10;i++{
    var j int
    fmt.Println(j)
    j = 5
}

10个0,j 是局部变量,每次循环都会重新声明,初始值,所以每次都是0

  • 猜猜二
for i:=0;;i++{
    fmt.Println(i)
}

无限循环,一直累加

  • 猜猜三
for i:=0;i<10;{
    fmt.Println(i)
}

无限循环,都是0,没有累加

  • 猜猜四
    for i,j:=2,10;i<j;{
        fmt.Println(i," - ",j)
        i *= 2
        j ++
    }

转载于:https://www.cnblogs.com/xiaobaiskill/p/10595334.html

<think>好的,我现在需要帮用户解决关于Go语言中for循环用法的问题。用户已经提供了一些参考资料,我需要整理这些信息并生成清晰的回答。首先,我得仔细阅读用户提供的四个引用,理解每个引用的内容,然后归纳出for循环的不同用法和示例。 首先看引用[1],里面提到Go语言的for循环经典语法是表达式1、表达式2、表达式3的结构,类似于传统的for循环,例如for i := 0; i < 5; i++。还提到for循环常用于遍历数组或切片。这一点很重要,是基本用法。 接下来是引用[2],这里指出forGo中唯一的循环关键字,但有四种用法:变量迭代(传统for)、条件循环(类似while)、死循环(loop)、数组迭代(foreach)。需要将这四种用法分别解释清楚,并给出例子。 引用[3]中的代码示例详细展示了四种情况:标准for循环、类似while的循环、无限循环使用break退出,以及continue的用法。这些具体的代码可以帮助用户理解不同场景下的应用,特别是条件循环和无限循环的处理方式。 引用[4]则展示了同一for循环中使用多个初始变量和自增变量的情况,比如字符串反转的例子。这里需要注意,自增变量不能用++或--,而是需要显式赋值,例如i, j = i+1, j-1。这一点可能容易出错,需要特别说明。 现在需要将这四个引用的信息整合成一个结构清晰的回答。根据用户提供的示例结构,应该先概述for循环的四种用法,然后分点详细说明每种用法,并附上代码示例。最后生成相关问题。 需要注意用户提到的系统级指令,比如数学表达式要用$...$,但这里的问题是关于编程的,可能不涉及数学公式,所以可能不需要处理这点。另外,回答必须使用中文,代码块用正确格式,引用标识要自然添加在引用的段落末尾。 接下来整理结构: 1. 传统for循环:初始化变量、条件判断、后续操作,示例代码。 2. 条件循环(类似while):省略初始化和后续,只保留条件,示例。 3. 无限循环:省略所有表达式,用break退出,示例。 4. 数组/切片遍历:使用range关键字,示例。 5. 多变量操作:同时初始化i和j,每次循环调整两个变量,示例。 每个部分需要引用对应的引用来源,例如在传统for循环后加[^1][^3],在条件循环加[^2][^3]等。 然后检查是否有遗漏,比如continue的用法在引用[3]中有示例,可能需要单独提一下,但用户的问题主要是for的用法,所以可能放在continue部分作为补充。 最后生成相关问题,参考用户示例中的相关问题,比如性能优化、不同用法的区别、注意事项等。 现在需要确保所有引用都被正确标注,没有遗漏。比如引用[4]中的多变量用法要在对应部分提到,并加上[^4]。 在写作时要注意用自然的中文,分步骤说明,代码示例正确,格式正确。此外,用户要求结构清晰,帮助用户逐步解决问题,因此每个用法分点列出,代码用代码块包裹,语言标记为go。</think>### Go语言for循环用法详解 Go语言的`for`循环是**唯一**的循环结构,支持多种编程范式。通过不同语法形式可以实现传统循环、条件循环、无限循环和集合遍历等功能[^2]。 --- #### 一、传统for循环 **语法格式**: ```go for 初始化语句; 条件判断; 后续操作 { // 循环体 } ``` **示例**: ```go for i := 0; i < 5; i++ { fmt.Printf("第%d次循环\n", i+1) } ``` - 初始化语句:`i := 0` - 条件判断:`i < 5` - 后续操作:`i++` 用途:适用于已知循环次数的场景[^1][^3]。 --- #### 二、条件循环(类似while) **语法格式**: ```go for 条件判断 { // 循环体 } ``` **示例**: ```go count := 0 for count < 3 { fmt.Printf("count: %d\n", count) count++ } ``` 用途:当循环次数不确定时,通过条件控制循环[^3]。 --- #### 三、无限循环 **语法格式**: ```go for { // 循环体(需手动退出) } ``` **示例**: ```go sum := 0 for { sum++ if sum > 3 { break // 通过break退出循环[^3] } fmt.Printf("sum: %d\n", sum) } ``` --- #### 四、遍历数组/切片(类似foreach) **语法格式**: ```go for 索引, 值 := range 集合 { // 循环体 } ``` **示例**: ```go arr := []int{10, 20, 30} for index, value := range arr { fmt.Printf("索引:%d, 值:%d\n", index, value) } ``` - 若不需要索引,可用`_`占位:`for _, value := range arr`[^3]。 --- #### 五、多变量操作 **语法特性**: - 支持同时初始化多个变量 - 自增操作需显式赋值,不能使用`++`或`--`简写[^4] **示例**(字符串反转): ```go func Reverse(s string) string { b := []byte(s) for i, j := 0, len(b)-1; i < len(b)/2; i, j = i+1, j-1 { b[i], b[j] = b[j], b[i] // 交换变量 } return string(b) } ``` --- #### 六、控制语句 1. **`break`**:强制退出当前循环 2. **`continue`**:跳过本次循环,进入下一次 ```go for i := 1; i <= 5; i++ { if i%2 == 0 { continue // 跳过偶数[^3] } fmt.Printf("奇数: %d\n", i) } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值