GoLang学习控制语句之for
for结构简介
Go语言只有for循环这一种循环结构,Go语言中的for循环语句的三个部分不需要用括号括起来,但循环体必须用 { } 括起来。基本的for循环包含三个由分号分开的组成部分:
- 初始化语句:在第一次循环执行前被执行
 - 循环条件表达式:每轮迭代开始前被求值
 - 后置语句:每轮迭代后被执行
 
初始化语句一般是一个短变量声明,这里声明的变量仅在整个 for 循环语句可见。如果条件表达式的值变为 false,那么迭代将终止。
基于计数器的for循环
基于计数器的迭代,基本形式为:
for 初始化语句; 条件语句; 修饰语句 {
    //循环语句
}
我们用for循环来计算100以内正整数的和。
package main
import "fmt"
func main(){
	sum := 0
	for i:=1;i<100;i++{
		sum += i
	}
	fmt.Println(sum)
}
由花括号括起来的代码块会被重复执行已知次数,该次数是根据计数器(此例为 i)决定的。循环开始前,会执行且仅会执行一次初始化语句 i := 1;,这比在循环之前声明更为简短。紧接着的是条件语句 i < 100;,在每次循环开始前都会进行判断,一旦判断结果为 false,则退出循环体。最后一部分为修饰语句 i++,一般用于增加或减少计数器。
这三部分组成的循环的头部,它们之间使用分号 ; 相隔,但并不需要括号 () 将它们括起来。例如:
for (i = 0; i < 10; i++) { } //非法代码!
和if-else语句类似,for循环中左花括号{必须和 for 语句在同一行,计数器的生命周期在遇到右花括号} 时便终止
基于条件判断的for循环
for 循环的第二种形式是没有头部的条件判断(类似其它语言中的 while 循环),基本形式为:
for 条件语句 {}
也可以认为这是没有初始化语句和修饰语句的 for 结构,因此 ;;便是多余的了。我们来写一个基于条件判断的简单for循环,示例代码如下:
package main
import "fmt"
func main() {
    var i int = 5
    for i >= 0 {
        i = i - 1
        fmt.Printf("The variable i is now: %d\n", i)
    }
}
for-range结构
提到for循环,我们必须再提一下range()这个内置函数,这是 Go 语言特有的一种的迭代结构,它一般用来遍历数组,slice和map等集合。我们用range来遍历一个数组,以下代码会打印出每个值的序号和对应的值。
package main
import(
  "fmt"
  )
func main() {
  arr := [...]int{6, 7, 8}
  for i, v := range arr {
        fmt.Println(i,v)
    }
}
无限循环
Go 语言有以下几种无限循环:
i:=0; ; i++
for { }
for ;; { }
for true { }
这些无限循环都是 for 循环的条件语句被省略了。如果 for 循环的头部没有条件语句,那么就会认为条件永远为 true。因此如果不想造成死循环,循环体内必须有相关的条件判断以确保会在某个时刻退出循环。
GoLang学习控制语句之for的更多相关文章
- GoLang学习控制语句之字符串
		
Go语言字符串是一种值类型,且值不可变,即创建某个文本后你无法再次修改这个文本的内容:更深入地讲,字符串是字节的定长数组.Go 代码使用 UTF-8 编码(且不能带 BOM),同时标识符支持 Unic ...
 - GoLang学习控制语句之switch
		
基本结构 相比较 C 和 Java 等其它语言而言,Go 语言中的 switch 结构使用上更加灵活.它接受任意形式的表达式,例如: switch var1 { case val1: ... case ...
 - GoLang学习控制语句之if/else
		
if语句 if 是用于测试某个条件(布尔型或逻辑型)的语句,如果该条件成立,则会执行 if 后由大括号括起来的代码块,否则就忽略该代码块继续执行后续的代码. if condition { // do ...
 - golang学习之beego框架配合easyui实现增删改查及图片上传
		
golang学习之beego框架配合easyui实现增删改查及图片上传 demo目录: upload文件夹主要放置上传的头像文件,main是主文件,所有效果如下: 主页面: 具体代码: <!DO ...
 - Golang学习 - 学习资源列表
		
Golang 学习资源: <Go 语言圣经(中文版)> - 书籍 http://shinley.com/index.html <学习 Go 语言> - 书籍 http://w ...
 - Golang学习:sublime text3配置golang环境
		
最近导师让学习golang, 然后我就找了些有关golang的学习视频和网站. 昨天在电脑上下载了go tools, 之后在sublime上配置了golang的运行环境.By the way, 我的电 ...
 - golang学习笔记20 一道考察对并发多协程操作一个共享变量的面试题
		
golang学习笔记20 一道考察对并发多协程操作一个共享变量的面试题 下面这个程序运行的能num结果是什么? package main import ( "fmt" " ...
 - golang学习笔记19 用Golang实现以太坊代币转账
		
golang学习笔记19 用Golang实现以太坊代币转账 在以太坊区块链中,我们称代币为Token,是以太坊区块链中每个人都可以任意发行的数字资产.并且它必须是遵循erc20标准的,至于erc20标 ...
 - golang学习笔记18 用go语言编写移动端sdk和app开发gomobile
		
golang学习笔记18 用go语言编写移动端sdk和app开发gomobile gomobile的使用-用go语言编写移动端sdk和app开发https://blog.csdn.net/u01249 ...
 
随机推荐
- 全球IT经理一致喜爱的ITSM系统、it服务台软件
 - 使用EventLog Analyzer进行VMware日志管理
 - word表格如何实现序号自动填充
			
打开word文档,我们需要在如下表格中的准考证号这一列中输入准考证号,手工输入肯定很慢,且容易出错. 我们先选中需要填充准考证号的表格. 选择功能区域中的“开始”,在“段落”组中点击“编号”按 ...
 - MySQL正则表达式 REGEXP详解
			
在开始这个话题之前我们首先来做一个小实验,比较一下REGEXP和Like他们两个哪个效率高,如果效率太低,我们就没有必要做过多的研究了,实验的代码如下:<?phpRequire("co ...
 - 【转】Linux useradd
			
Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面可以帮助系统管理员对使用系统的用户进行 ...
 - 2018.11.07 bzoj1965: [Ahoi2005]SHUFFLE 洗牌(快速幂+exgcd)
			
传送门 发现自己的程序跑得好慢啊233. 管他的反正AC了 先手玩样例找了一波规律发现题目要求的就是a∗2m≡l(modn+1)a*2^m\equiv l \pmod {n+1}a∗2m≡l(modn ...
 - Mybatis-Plus 实战完整学习笔记(四)------全局参数配置
			
一.全局配置设置 (1)全局配置Id自动生成 <!--定义mybatisplus全局配置--> <bean id="globalConfig" class=&qu ...
 - js,javascript,打印对象,object
			
function writeObj(obj){ var description = ""; for(var i in obj){ var property=obj[i]; desc ...
 - Docker Compose部署 nginx代理Tomcat集群
			
一.简介 使用Docker镜像部署Nginx代理的多个Tomcat集群: 使用Dockerfile构建nginx镜像 使用Dockerfile构建tomcat镜像 mysql镜像使用docker hu ...
 - 谷歌的java文本差异对比工具
			
package com.huawei.common.transfertool.utils; /** * @author Paul * @version 0.1 * @date 2018/12/11 * ...