Go - 循环
概述
前几篇文章分享了 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 - 循环的更多相关文章
- 【.net 深呼吸】细说CodeDom(8):分支与循环
有人会问,为啥 CodeDom 不会生成 switch 语句,为啥没生成 while 语句之类.要注意,CodeDom只关心代码逻辑,而不是语法,语法是给写代码的人用的.如果用.net的“反编译”工具 ...
- Recurrent Neural Network系列1--RNN(循环神经网络)概述
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...
- Python学习--04条件控制与循环结构
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...
- 模仿Linux内核kfifo实现的循环缓存
想实现个循环缓冲区(Circular Buffer),搜了些资料多数是基于循环队列的实现方式.使用一个变量存放缓冲区中的数据长度或者空出来一个空间来判断缓冲区是否满了.偶然间看到分析Linux内核的循 ...
- 【JS基础】循环
for 循环的语法: for (语句 1; 语句 2; 语句 3) { 被执行的代码块 } 语句 1 在循环(代码块)开始前执行 语句 2 定义运行循环(代码块)的条件 语句 3 在循环(代码块)已被 ...
- 【python之路4】循环语句之while
1.while 循环语句 #!/usr/bin/env python # -*- coding:utf-8 -*- import time bol = True while bol: print '1 ...
- To Java程序员:切勿用普通for循环遍历LinkedList
ArrayList与LinkedList的普通for循环遍历 对于大部分Java程序员朋友们来说,可能平时使用得最多的List就是ArrayList,对于ArrayList的遍历,一般用如下写法: p ...
- JavaScript单线程和浏览器事件循环简述
JavaScript单线程 在上篇博客<Promise的前世今生和妙用技巧>的开篇中,我们曾简述了JavaScript的单线程机制和浏览器的事件模型.应很多网友的回复,在这篇文章中将继续展 ...
- .NET基础 一步步 一幕幕[循环、逻辑语句块]
循环.逻辑语句块 好久不写博客了,断更了好几天了,从上周五到今天,从北京到上海,跨越了1213.0公里,从一个熟悉的城市到陌生的城市,还好本人适应力比较好,还有感谢小伙伴的接风咯,一切都不是事,好 ...
- Linux进程管理及while循环
目录 进程的相关概念 进程查看及管理工具的使用 Linux系统作业控制 调整进程优先级 网络客户端工具 bash之while循环 20.1.进程类型 守护进程 daemon,在系统引导过程中启动的进程 ...
随机推荐
- Fedora 30 安装 Gradle
当前的 Gradle 最新版本是5.4.1.您可以从发布页面下载所有 Gradle 版本的二进制文件和查看文档. 先决条件 Gradle 能够在所有主流操作系统上运行,只要具备 Java-JDK/JR ...
- windows下启动redis
解决方案 使用现成的基于windows的redis程序 github上有许多封装好的基于windows的redis程序,可以直接使用,但是版本更新不及时比如: https://github.com/M ...
- 索引Index
优缺点 索引是对数据库表中一列或多列的值进行排序的一种结构为了提高查询的效率索引一般建立在需要经常查询的地方 优点 创建索引可以大大提高系统的性能第一,通过创建唯一性索引,可以保证数据库表中每一行数据 ...
- 获取bing图片并自动设置为电脑桌面背景(使用 URLDownloadToFile API函数)
众所周知,bing搜索网站首页每日会更新一张图片,张张漂亮(额,也有一些不合我口味的),特别适合用来做电脑壁纸. 我们想要将bing网站背景图片设置为电脑桌面背景的通常做法是: 上网,搜索bing 找 ...
- 【Ubuntu】查看进程端口占用信息
1.查看进程信息 ①进程查看 ps -aux ②根据PID查看进程 ps -aux | grep pid ③进程计数,查看指定进程 ps -aux | wc -l ps -aux | grep kwo ...
- Android零基础入门第48节:可折叠列表ExpandableListView
原文:Android零基础入门第48节:可折叠列表ExpandableListView 上一期学习了AutoCompleteTextView和MultiAutoCompleteTextView,你已经 ...
- MIPS虚拟机代码
http://download.eeworld.com.cn/download/mamselc/472333http://download.eeworld.com.cn/detail/lamas/36 ...
- css的圣杯布局
圣杯布局和双飞翼布局实现的效果是一样的. 代码解析: 1.四个section,container,main,left,right.其中那个container为父容器. 2.main,left,righ ...
- Linux升级OpenSSL版本
安装nginx的时候,出现了这样的问题: nginx : Depends: libssl1.0.0 (>= 1.0.2~beta3) but 1.0.1f-1ubuntu2.11 is to b ...
- [每天记录一个Bug]Cell中由于block加载网络请求产生的复用
Bug 出现场景: cell中使用加载图片的网络请求出现复用,截图如下: 复用原因: Cell Model中只有一个用户的uid,所有用户相关信息:例如头像\名称\信息等是通过 ...