go for 循环遍历数组并排序_10. Go语言流程控制:for 循环

2eb5af88849cd7ee7103166144bc0711.png

本文原文:http://golang.iswbm.com

Github:http://github.com/iswbm/GolangCodingTime

Go里的流程控制方法还是挺丰富,整理了下有如下这么多种:

  • if - else 条件语句
  • switch - case 选择语句
  • for - range 循环语句
  • goto 无条件跳转语句
  • defer 延迟执行

上一篇讲了switch - case 选择语句,今天先来讲讲 for 循环语句。

0. 语句模型

这是 for 循环的基本模型。

for [condition |  ( init; condition; increment ) | Range]
{statement(s);
}

可以看到 for 后面,可以接三种类型的表达式。

  1. 接一个条件表达式
  1. 接三个表达式
  1. 接一个 range 表达式

但其实还有第四种

  1. 不接表达式

1. 接一个条件表达式

这个例子会打印 1 到 5 的数值。

a := 1
for a <= 5 {fmt.Println(a)a ++ 
}

输出如下

1
2
3
4
5

2. 接三个表达式

for 后面,紧接着三个表达式,使用 ; 分隔。

这三个表达式,各有各的用途

  • 第一个表达式:初始化控制变量,在整个循环生命周期内,只运行一次;
  • 第二个表达式:设置循环控制条件,当返回true,继续循环,返回false,结束循环;
  • 第三个表达式:每次循完开始(除第一次)时,给控制变量增量或减量。

这边的例子和上面的例子,是等价的。

import "fmt"func main() {for i := 1; i <= 5; i++ {fmt.Println(i)}
}

输出如下

1
2
3
4
5

2. 不接表达式:无限循环

在 Go 语言中,没有 while 循环,如果要实现无限循环,也完全可以 for 来实现。

当你不加任何的判断条件时, 就相当于你每次的判断都为 true,程序就会一直处于运行状态,但是一般我们并不会让程序处于死循环,在满足一定的条件下,可以使用关键字 break 退出循环体,也可以使用 continue 直接跳到下一循环。

下面两种写法都是无限循环的写法。

for {代码块
}// 等价于
for ;; {代码块
}

举个例子

import "fmt"func main() {var i int = 1for {if i > 5 {break}fmt.Printf("hello, %dn", i)i++}
}

输出如下

hello, 1
hello, 2
hello, 3
hello, 4
hello, 5

3. 接 for-range 语句

遍历一个可迭代对象,是一个很常用的操作。在 Go 可以使用 for-range 的方式来实现。

range 后可接数组、切片,字符串等

由于 range 会返回两个值:索引和数据,若你后面的代码用不到索引,需要使用 _ 表示 。

import "fmt"func main() {myarr := [...]string{"world", "python", "go"}for _, item := range myarr {fmt.Printf("hello, %sn", item)}
}

输出如下

hello, world
hello, python
hello, go

如果你用一个变量来接收的话,接收到的是索引

import "fmt"func main() {myarr := [...]string{"world", "python", "go"}for i := range myarr {fmt.Printf("hello, %vn", i)}
}

输出如下

hello, 0
hello, 1
hello, 2

好了,今天的文章就到这里了。

若今天的分享对你有帮助,不如点个赞,支持一下?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/438644.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

27代理模式(Proxy Pattern)

直接与间接&#xff1a; 人们对复杂的软件系统常有一种处理手法&#xff0c;即增加一层间接层&#xff0c;从而对系统获得一种更为灵活、 满足特定需求的解决方案。 …

mysql设计资源目录售卖_MySQL目录设计一些策略_mysql

前言索引加快了检索的速度&#xff0c;但是却降低了数据列里插入、删除以及修改数值的速度。也就是说&#xff0c;索引降低了许多涉及写入的操作速度。之所以出现这种情况&#xff0c;是由于写入一条数据不仅仅是要写入到数据行&#xff0c;还需要所有的索引都作出相应的改变如…

31模板方法(Template Method)

无处不在的Template Method 如果你只想掌握一种设计模式&#xff0c;那么它就是Template Method! 动机(Motivate): 变化 -----是软件设计的永恒主题&#xff0c;如何管理变化带来的复杂性&#xff1f;设计模式的艺术性和复杂度就在于如何 分析&#xff0c;并发现系统中…

bat 脚本清空窗口内容_tomcat9.0启动脚本startup.bat的分析

1、 Apache Tomcat的下载和安装从Apache官网https://tomcat.apache.org/可以下载各种版本的tomcat软件&#xff0c;下载的文件格式可以是zip/tar.gz/exe形式的。如下图所示&#xff0c;在64位windows中使用tomcat&#xff0c;我们可以下载"64-bit Windows.zip",直接解…

33迭代器模式(Iterator Pattern)

动机(Motivate): 在软件构建过程中&#xff0c;集合对象内部结构常常变化各异。但对于这些集合对象&#xff0c;我们希望在不暴露其内部结构的同时&#xff0c;可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为“ 同一种算法在多种集合对象上进行操作…

MySQL什么是关系_MySQL教程-关系模型

MySQL教程-关系模型Date 2021-1-22Author Haihan Gao什么是关系模型关系模型本质上就是多个存储数据的二维表表的每一行称为记录记录是一个逻辑意义上的数据表的每一列称为字段。同一个表每一行记录拥有若干相同字段字段定义数据类型&#xff1a;INT,BIGINT,DOUBLE是否允许为NU…

32命令模式(Command Pattern)

耦合与变化&#xff1a; 耦合是软件不能抵御变化灾难的根本性原因。不仅实体对象与实体对象之间存在耦合关系&#xff0c;实体对象与行为操作之间也存在耦合关系。 动机(Mot…

mysql 事务实例_mysql实现事务的提交和回滚实例

mysql创建存储过程的官方语法为&#xff1a;复制代码 代码如下:START TRANSACTION | BEGIN [WORK]COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]SET AUTOCOMMIT {0 | 1}我这里要说明的mysql事务处理多个SQL语句的回滚情况。…

34观察者模式(Observer Pattern)

动机(Motivate):在软件构建 过程中&#xff0c;我们需要为某些对象建立一种“通知依赖关系” --------一个对象&#xff08;目标对象&#xff09;的状态发生改变&#xff0c;所有的依赖对象&#xff08;观察者对象&#xff09;都将得到通知。如果这样的依赖关系过于紧密&#x…

mysql自定义存储过程_MySQL自定义函数、触发器、存储过程

存储过程概念存储过程&#xff0c;是一个数据库对象&#xff0c;类似一个函数。在存储过程中可以使用SQL中的绝大部分内容&#xff0c;并且可以加入编程语言的特性(循环判断分支)。编写好存储过程之后&#xff0c;可以在客户端调用存储过程&#xff0c;存储过程会自动的执行里面…

36中介者模式(Mediator Pattern)

依赖关系的转化: 动机(Motivate): 在软件构建过程中&#xff0c;经常会出现多个对象互相关联交互的情况&#xff0c;对象之间常常会维持一种复杂的引用关系&#xff0c;如果遇到一些需求的更改&#xff0c;这种直接的引用关系将面临不断的变化。 在这种情况…

相似理论与模型试验_正交实验下的固液耦合相似材料研究

原标题&#xff1a;基于正交试验的固液耦合相似材料研究摘 要:为了研究矿井突水演化规律&#xff0c;通过正交试验研制出一种能同时满足固体力学与水理性的固液 耦合相似材料&#xff0c;该相似材料以河沙为骨料、水泥和大白粉为胶结剂、液体石蜡和淀粉为调节剂。采用 极差分析…

35解释器模式(Interpreter Pattern)

动机(Motivate): 在软件构建过程中&#xff0c;如果某一特定领域的问题比较复杂&#xff0c;类似的模式不断重复出现&#xff0c;如果使用普通的编程方式来实现将面临非常频繁的变化。 在这种情况下&#xff0c;将特定领域的问题表达为某种文法规则下的句子&#xff0c;…

37职责链模式(Chain of Responsibility Pattern)

动机(Motivate)&#xff1a; 在软件构建过程中&#xff0c;一个请求可能被多个对象处理&#xff0c;但是每个请求在运行时只能有一个接受者&#xff0c;如果显示指定&#xff0c;将必不可少地带来请求发送者与接受者的紧耦合。 如何使请求的发送者不需要指定具体的接受…

python3中format函数列表_Python3之字符串格式化format函数详解(上)

173.jpg概述在Python3中&#xff0c;字符串格式化操作通过format()方法或者fstring实现。而相比于老版的字符串格式化方式&#xff0c;format()方法拥有更多的功能&#xff0c;操作起来更加方便&#xff0c;可读性也更强。该函数将字符串当成一个模板&#xff0c;通过传入的参数…

38备忘录模式(Memento Pattern)

对象状态的回溯&#xff1a; 对象状态的变化无端&#xff0c;如何回溯/恢复对象在某个点的状态&#xff1f; 动机&#xff1a; 在软件构建过程中&#xff0c;某些对象的状态在转换过程中&#xff0c;可能由于某种需要&#xff0c;要求程序能够…

python剪切文件如何恢复_用python实现的可以拷贝或剪切一个文件列表中的所有文件...

# coding:utf-8import osimport sysdef cut_and_paste_file(source, destination):source: file path 中文destination: directory pathdef format_path(path):if not os.path.isabs(path):path os.path.join(os.getcwd(), path)return pathdef mk_dir(path):if not os.path.e…

39策略模式(Strategy Pattern)

算法与对象的耦合&#xff1a; 对象可能经常需要使用多种不同的算法&#xff0c;但是如果变化频繁&#xff0c;会将类型变得脆弱... 动机&#xff1a; 在软件构建过程中&#xff0c;某些对象使用的算法可能多种多样&#xff0c;经常改变&#xff0c;如果将…

python选择表单_如何使用Python在表单中选择选项?

下面是一些基本用法示例&#xff1a;>>> import mechanize>>> br mechanize.Browser()>>> br.open(http://www.w3schools.com/html/html_forms.asp)表单有一个name属性&#xff1b;但有时它是空的&#xff1a;>>> [f.name for f in br.fo…

40访问者模式(Visitor Pattern)

类层次结构的变化&#xff1a; 类层次结构中可能经常由于引入新的操作&#xff0c;从而将类型变得脆弱... 动机&#xff1a; 在软件构建过程中&#xff0c;由于需求的改变&#xff0c;某些类层次结构中常常需要增加新的行为(方法),如果直接…