概述

前几篇文章分享了 array 数组、slice 切片、map 集合,这篇文章分享如何循环获取里面的元素,同时也是对前几篇文章的复习。

本篇文章会用到的关键字 for、range、break、continue、goto、switch。

循环 array

//demo_18.go
package main import (
"fmt"
) func main() {
person := [3] string {"Tom", "Aaron", "John"}
fmt.Printf("len=%d cap=%d array=%v\n", len(person), cap(person), person) fmt.Println("") //循环
for k, v := range person {
fmt.Printf("person[%d]: %s\n", k, v)
} fmt.Println("") for i := range person {
fmt.Printf("person[%d]: %s\n", i, person[i])
} fmt.Println("") for i := 0; i < len(person); i++ {
fmt.Printf("person[%d]: %s\n", i, person[i])
} fmt.Println("") //使用空白符
for _, name := range person {
fmt.Println("name :", name)
}
}

运行结果:

循环 slice

//demo_19.go
package main import (
"fmt"
) func main() {
person := [] string {"Tom", "Aaron", "John"}
fmt.Printf("len=%d cap=%d slice=%v\n", len(person), cap(person), person) fmt.Println("") //循环
for k, v := range person {
fmt.Printf("person[%d]: %s\n", k, v)
} fmt.Println("") for i := range person {
fmt.Printf("person[%d]: %s\n", i, person[i])
} fmt.Println("") for i := 0; i < len(person); i++ {
fmt.Printf("person[%d]: %s\n", i, person[i])
} fmt.Println("") //使用空白符
for _, name := range person {
fmt.Println("name :", name)
}
}

运行结果:

循环 map

//demo_20.go
package main import (
"fmt"
) func main() {
person := map[int]string{
1 : "Tom",
2 : "Aaron",
3 : "John",
} fmt.Printf("len=%d map=%v\n", len(person), person) fmt.Println("") //循环
for k, v := range person {
fmt.Printf("person[%d]: %s\n", k, v)
} fmt.Println("") for i := range person {
fmt.Printf("person[%d]: %s\n", i, person[i])
} fmt.Println("") for i := 1; i <= len(person); i++ {
fmt.Printf("person[%d]: %s\n", i, person[i])
} fmt.Println("") //使用空白符
for _, name := range person {
fmt.Println("name :", name)
}
}

运行结果:

break

跳出当前循环,可⽤于 for、switch、select。

//demo_21.go
package main import "fmt" func main() {
for i := 1; i <= 10; i++ {
if i == 6 {
break
}
fmt.Println("i =", i)
}
}

运行结果:

continue

跳过本次循环,只能用于 for。

//demo_22.go
package main import "fmt" func main() {
for i := 1; i <= 10; i++ {
if i == 6 {
continue
}
fmt.Println("i =", i)
}
}

运行结果:

goto

改变函数内代码执行顺序,不能跨函数使用。

//demo_23.go
package main import "fmt" func main() {
fmt.Println("begin") for i := 1; i <= 10; i++ {
if i == 6 {
goto END
}
fmt.Println("i =", i)
} END :
fmt.Println("end")
}

运行结果:

switch

//demo_24.go
package main import "fmt" func main() {
i := 1
fmt.Printf("当 i = %d 时:\n", i) switch i {
case 1:
fmt.Println("输出 i =", 1)
case 2:
fmt.Println("输出 i =", 2)
case 3:
fmt.Println("输出 i =", 3)
fallthrough
case 4,5,6:
fmt.Println("输出 i =", "4 or 5 or 6")
default:
fmt.Println("输出 i =", "xxx")
}
}

运行结果:

当 i = 1 时:输出 i = 1

当 i = 2 时:输出 i = 2

当 i = 3 时:

输出 i = 3

输出 i = 4 or 5 or 6

当 i = 4 时:输出 i = 4 or 5 or 6

当 i = 7 时:输出 i = xxx

结论:

  • 默认每个 case 带有 break
  • case 中可以有多个选项
  • fallthrough 不跳出,并执行下一个 case

推荐阅读

本文欢迎转发,转发请注明作者和出处,谢谢!

Go - 循环的更多相关文章

  1. 【.net 深呼吸】细说CodeDom(8):分支与循环

    有人会问,为啥 CodeDom 不会生成 switch 语句,为啥没生成 while 语句之类.要注意,CodeDom只关心代码逻辑,而不是语法,语法是给写代码的人用的.如果用.net的“反编译”工具 ...

  2. Recurrent Neural Network系列1--RNN(循环神经网络)概述

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...

  3. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  4. 模仿Linux内核kfifo实现的循环缓存

    想实现个循环缓冲区(Circular Buffer),搜了些资料多数是基于循环队列的实现方式.使用一个变量存放缓冲区中的数据长度或者空出来一个空间来判断缓冲区是否满了.偶然间看到分析Linux内核的循 ...

  5. 【JS基础】循环

    for 循环的语法: for (语句 1; 语句 2; 语句 3) { 被执行的代码块 } 语句 1 在循环(代码块)开始前执行 语句 2 定义运行循环(代码块)的条件 语句 3 在循环(代码块)已被 ...

  6. 【python之路4】循环语句之while

    1.while 循环语句 #!/usr/bin/env python # -*- coding:utf-8 -*- import time bol = True while bol: print '1 ...

  7. To Java程序员:切勿用普通for循环遍历LinkedList

    ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: p ...

  8. JavaScript单线程和浏览器事件循环简述

    JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...

  9. .NET基础 一步步 一幕幕[循环、逻辑语句块]

    循环.逻辑语句块   好久不写博客了,断更了好几天了,从上周五到今天,从北京到上海,跨越了1213.0公里,从一个熟悉的城市到陌生的城市,还好本人适应力比较好,还有感谢小伙伴的接风咯,一切都不是事,好 ...

  10. Linux进程管理及while循环

    目录 进程的相关概念 进程查看及管理工具的使用 Linux系统作业控制 调整进程优先级 网络客户端工具 bash之while循环 20.1.进程类型 守护进程 daemon,在系统引导过程中启动的进程 ...

随机推荐

  1. WPF学习目录

    基本概念 数据源Source-目标Target WPF生命周期 App.xaml 依赖属性 WPF路由 线程操纵UI问题 利用属性中设置.查看DataContext/Command等 分析布局 写数据 ...

  2. IOS开发之iOS深浅拷贝

    这里主要侧重于集合类的深浅拷贝,主要事因为工作的时候遇到这个问题. 有不足的地方欢迎指正 首先我们需要有这样的一个前提: [array addObject:obj]; 这样obj的引用计数会增加1,如 ...

  3. IOS开发之关于NSString和NSMutableString的retainCount

    1. 字符串常量 NSString *s = @"test"; NSLog(@"s:%lx",[s retainCount]); //fffffffffffff ...

  4. WPF ScrollViewer(滚动条) 自定义样式表制作 (改良+美化)

    原文:WPF ScrollViewer(滚动条) 自定义样式表制作 (改良+美化) 注释直接写在代码里了   不太理解意思的 可以先去看看我上一篇  WPF ScrollViewer(滚动条)  自定 ...

  5. 【全面解禁!真正的Expression Blend实战开发技巧】序章

    原文:[全面解禁!真正的Expression Blend实战开发技巧]序章 从silverlight2开始我也和大家一样一直在跟随微软的脚步,从sl2~sl4一步一步过来,总结了不少心得体会.由于各种 ...

  6. C# 金额转为大写金额

    /// <summary> /// 金额转为大写金额 /// </summary> public class MoneyConvertChinese { /// <sum ...

  7. Windows Phone开发参考资料

    Windows Phone API 参考 http://msdn.microsoft.com/zh-cn/library/windows/apps/ff626516(v=vs.105).aspx Wi ...

  8. Qt Widget 利用 Qt4.5 实现酷炫透明窗体

    本文讲述的是Qt Widget 利用 Qt4.5 实现酷炫透明窗体,QWidget类中的每一个窗口部件都是矩形,并且它们按Z轴顺序排列的.一个窗口部件可以被它的父窗口部件或者它前面的窗口部件盖住一部分 ...

  9. 自定义View相关的博客收藏

    颜色: http://android.jobbole.com/83283/ 坐标: http://android.jobbole.com/83276/ 流程介绍: http://android.job ...

  10. 【Python】:拓展Queue实现有序不重复队列

    最近手头有个需求是这样的,定期检查数据库获取失败任务并且进行重启.最早想到的是添加一个生产者&&消费者队列,但是发现很多棘手的问题. 1.重启任务是调用的一个shell脚本然后在脚本中 ...