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;从而对系统获得一种更为灵活、 满足特定需求的解决方案。 …

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;可以让外部客户代码透明地访问其中包含的元素;同时这种“透明遍历”也为“ 同一种算法在多种集合对象上进行操作…

32命令模式(Command Pattern)

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

34观察者模式(Observer Pattern)

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

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;要求程序能够…

39策略模式(Strategy Pattern)

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

40访问者模式(Visitor Pattern)

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

41状态模式(State Pattern)

对象状态影响对象行为&#xff1a; 对象拥有不同的状态&#xff0c;往往会行使不同的行为... 动机&#xff1a; 在软件构建过程中&#xff0c;某些对象的状态如果改变以及其行为也会随之而发生变化&#xff0c;比如文档处于只读状态&#xff0c;其支…

python中空格属于字符吗_举例说明python中空格是属于字符

python中空格属于字符吗&#xff1f;答案是肯定的&#xff0c;空格在Python中也是属于字符的。案例&#xff1a;输入一行字符&#xff0c;分别统计出其中英文字母、空格、数字和其它字符的个数。#!/usr/bin/python# -*- coding: UTF-8 -*-import strings raw_input(input a st…

【转】如何将域中的AD数据导入SharePoint

最近刚装好sharepoint2010&#xff0c;想要研究一下&#xff0c;第一件想做的事就是想把AD中的用户信息导入到SharePoint中。 那现在就来看看我是怎么操作的&#xff1a; 1.打开管理中心 sharepoint是通过“用户配置文件同步服务”来实现同步&#xff0c;所以第一步要开启这个…

Apsara Clouder专项技能认证:实现调用API接口

一.API 简介 1.API 的概念 API(Application Programming Interface应用程序编程接口)是一些预定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码或理解内部工作机制的细节 2.API 的特点 API 是一个明确定义的接口,可以为其…

第一节:复习委托,并且通过委托的异步调用开启一个新线程和异步回调、异步等待

一. 再谈委托 1. 委托是一个关键字为delegate的自定义类型&#xff0c;通过委托可以把方法以参数的形式传递给另外一个方法&#xff0c;实现插件式的开发模式&#xff1b; 同时调用委托的时候&#xff0c;委托所包含的所有方法都会被实现。 2. 委托的发展历史&#xff1a;new…

linux 修改 java 内存_Linux 和 Windows修改Java虚拟机内存大小

因为内存溢出问题1. Linux下直接修改%tomcat_home%/bin/catalina.sh文件在注释下紧接一行也就是脚本正文开始之前 加上Java_OPTS-server -Xms512m -Xmx1024m -XX:PermSize128m -XX:MaxPermSize512m如果报-x没有定义,则用declare -x JAVA_OPTS"-Xms512m -Xmx1024"初始…