跟着google工程师学Go语言(六):Golang循环

欢迎来到:Google资深工程师深度讲解Go语言

视频地址:Google资深工程师深度讲解Go语言 -循环for结构

基本语法要点:

  • for,if 后面的条件没有括号
  • if 条件里也可以定义变量
  • 没有 while
  • switch 不需要break, 也可以直接switch多个条件

最简单的基于计数器的迭代,基本形式为:

for 初始化语句; 条件语句; 修饰语句 {}

for 结构的第二种形式是没有头部的条件判断迭代(类似其它语言中的 while 循环),基本形式:for 条件语句 {}

条件语句是可以被省略的,如 i:=0; ; i++ 或 for { } 或 for ;; { }(;; 会在使用 gofmt 时被移除):这些循环的本质就是无限循环。最后一个形式也可以被改写为 for true { },但一般情况下都会直接写 for { }

如果 for 循环的头部没有条件语句,那么就会认为条件永远为 true,因此循环体内必须有相关的条件判断以确保会在某个时刻退出循环。

想要直接退出循环体,可以使用 break 语句或 return 语句直接返回。

但这两者之间有所区别,break 只是退出当前的循环体,而 return 语句提前对函数进行返回,不会执行后续的代码。

无限循环的经典应用是服务器,用于不断等待和接受新的请求。

for t, err = p.Token(); err == nil; t, err = p.Token() {

}

示例:test5-for.go

扫描二维码关注公众号,回复: 3472588 查看本文章
package main

import (
    "strconv"
    "os"
    "bufio"
    "fmt"
)

//转二进制
func convertToBin(n int) string {
    result := ""
    for ;n >0 ; n /= 2 {
        lsb := n % 2
        result = strconv.Itoa(lsb) + result
    }
    return result
}

func sum() int {
    sum := 0
    for i :=1;i<=100 ; i++ {
        sum += i
    }
    return sum
}

//省略初始条件,相当于while
func printFile(filename string)  {
    file,err := os.Open(filename)
    if err != nil {
        panic(err)
    }
    scanner := bufio.NewScanner(file)
    for scanner.Scan(){
        fmt.Println(scanner.Text())
    }
}

//死循环
func forever()  {
    for {
        fmt.Println("abc")
    }
}

func main()  {
    fmt.Println(
        convertToBin(5), //101
        convertToBin(13),//
    )

    fmt.Printf("sum:%d\n",sum())
    printFile("abc.txt")
}

在目录下,新建文本文件:abc.txt

for-range 结构在后面会提到。

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


参考文档,Go入门指南:for结构

猜你喜欢

转载自blog.csdn.net/u010363932/article/details/81634810