Go 语言函数式编程系列教程(十六) —— 流程控制篇:循环语句

栏目: Go · 发布时间: 6年前

内容简介:与其它编程语言不同的是,Go 语言中的循环语句只支持打印结果是 5050。Go 语言不支持

基本使用

与其它编程语言不同的是,Go 语言中的循环语句只支持 for 关键字,而不支持 whiledo-while 结构。关键字 for 的基本使用方法与 PHP 类似,只是循环条件不含括号,比如我们要计算 1 到 100 之间所有数字之后,可以这么做:

sum := 0 
for i := 1; i <= 100; i++ { 
    sum += i 
}
fmt.Println(sum)

打印结果是 5050。

无限循环

Go 语言不支持 whiledo-while 循环语句,对于无限循环场景的话,可以通过不带循环条件的 for 语句实现,下面我们通过无限循环来改写上述计算 1 到 100 以内数字之和的实现如下:

sum := 0
i := 0
for {
    i++
    if (i > 100) {
        break
    }
    sum += i
}
fmt.Println(sum)

可以看到,我们可以通过 break 语句来中断无限循环,上述代码计算结果也是 5050。

多重赋值

此外,在 for 循环条件表达式中也支持多重赋值,我们可以通过这一特性快速实现数组/切片内首尾元素的交换,如下所示:

a := []int{1, 2, 3, 4, 5, 6} 
for i, j := 0, len(a) – 1; i < j; i, j = i + 1, j – 1 { 
    a[i], a[j] = a[j], a[i] 
}
fmt.Println(a)

上述代码的打印结果是 [6 5 4 3 2 1]

嵌套循环

正如我们在多维数组中演示的那样,可以通过嵌套循环对多维数组进行遍历,这里就不再赘述了。

for-range 结构

另外,对于可迭代的集合(数组、切片、字典),Go 语言还支持通过 for-range 结构对其进行循环遍历,关于这个循环结构的使用我们前面已经演示过,比如我们要遍历上面的切片 a,可以这么做:

for k, v := range a {
    fmt.Println(k, v)
}

该循环结构的便利之处在于可以同时取出索引/键及对应的值。

基于条件判断进行循环

另外,我们还可以基于条件判断进行循环,只有满足指定的条件才会执行循环体中的代码,我们可以基于这一特性改写之前实现无限循环的代码如下:

sum := 0
i := 0
for i < 100 {
    i++
    sum += i
}
fmt.Println(sum)

只有当 i 小于 100 时才会执行求和运算,等于 100 时,由于不满足判断条件会跳过循环体执行后续逻辑。

注意事项

综上,在 Go 语言中使用循环语句时,需要注意以下几点:

  • 和条件语句、分支语句一样,左花括号 { 必须与 for 处于同一行;
  • 不支持 whiedo-while 结构的循环语句;
  • 可以通过 for-range 结构对可迭代集合进行遍历;
  • 支持基于条件判断进行循环迭代;
  • 与 PHP 一样,都允许在循环条件中定义和初始化变量,且支持多重赋值;
  • Go 语言的 for 循环同样支持 continuebreak 来控制循环,但是它提供了一个更高级的 break ,可以选择中断哪一个循环,如下例:
for j := 0; j < 5; j++ { 
    for i := 0; i < 10; i++ { 
        if i > 5 { 
            break JLoop
        }
        fmt.Println(i)
    } 
} 
JLoop: 
// ...

本例中, break 语句终止的是 JLoop 标签处的外层循环。


以上所述就是小编给大家介绍的《Go 语言函数式编程系列教程(十六) —— 流程控制篇:循环语句》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Remote

Remote

Jason Fried、David Heinemeier Hansson / Crown Business / 2013-10-29 / CAD 26.95

The “work from home” phenomenon is thoroughly explored in this illuminating new book from bestselling 37signals founders Fried and Hansson, who point to the surging trend of employees working from hom......一起来看看 《Remote》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具