46

go for循环

 5 years ago
source link: https://studygolang.com/articles/18449?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
  • 快速入门
for i := 1; i <= 10; i++ {
        fmt.Println(i)
    }
  • 流程图

    zAJBvqm.png!web

for循环注意事项和细节

1、循环条件是返回一个布尔值的表达式

2、 for 循环的第二种使用方式

for 循环判断条件 { //循环执行语句
      }
    //将变量初始化和变量迭代写到其它位置

示例:

j := 1
    for j <= 10 {
        fmt.Println("hello....", j)
        j++
    }

3、 for 循环的第三种使用方式

for {
    //循环语句
}

等价: for ; ; { } 是个无限循环,需要配合 break 语句来用

示例:

k := 1
    for { //等价 for ; ; { }
        if k <= 10 {
            fmt.Println("ok...", k)
        } else {
            break //跳出循环
        }
        k++
    }

3、Golang 供 for-range 的方式,可以方便遍历 字符串和数组 (注: 数组的遍历,我们放到讲数组 的时候再讲解) ,案例说明如何遍历字符串。

  • 字符串遍历方式 1-传统方式
var str string = "hello,steven qin"
    for i := 0; i < len(str); i++ {
        fmt.Printf("%c \n", str[i])
    }
  • for-range 方式
var str string = "abc~defg"
    for index, val := range str {
        fmt.Printf("index=%d , val=%c \n", index, val)
    }

细节讨论

1、 如果我们的 字符串含有中文 ,那么传统的遍历字符串方式,就是错误,会出现乱码。原因是传统的对字符串的遍历是按照字节来遍历,而 一个汉字在 utf8 编码是对应 3 个字节

  • 如何解决 需要要将 str 转成 []rune 切片.=> 体验一把
var str string = "hello,steven qin!哈哈"
    str2 := []rune(str) //转为切片类型
    for i := 0; i < len(str2); i++ {
        fmt.Printf("%c \n", str2[i])
    }

2、 for-range方法不受影响

var str string = "abc~defg,哈哈"
    for index, val := range str {
        fmt.Printf("index=%d , val=%c \n", index, val)
    }

练习

1、打印 1~100 之间所有是 9 的倍数的整数的个数及总和

func main() {
    var max uint64 = 100
    var count uint64 = 0
    var sum uint64 = 0
    var i uint64 = 1 //i的类型要和max一致
    for ; i <= max; i++ {
        if i%9 == 0 {
            count++
            sum += i
        }
    }
    fmt.Printf("count=%v sum=%v\n", count, sum) //%v为值的默认格式表示
}

2、练习2

var n int = 10
    for i := 0; i <= n; i++ {
        fmt.Printf("%v + %v = %v\n", i, n-i, n)
    }

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK