一、基于计数器的迭代

  • 格式
for 初始化语句; 条件语句; 修饰语句{}

  • 实例
package main

import "fmt"

func main(){
for i:=0;i<10;i++{
fmt.Print(i)
}
fmt.Println()
/*
执行步骤:
1、 初始化,条件判断,条件成立执行循环体,不成立结束for循环
2、条件成立执行循环体,i++,条件判断
3、条件成立执行循环体,i++,条件判断
4、...
5、条件不成立结束循环体
*/ // 求 100 以内偶数之和
var sum int = 0
for i:=0;i <= 100;i++{
if i%2 == 0{ // 取余为0 则为偶
sum += i
}
}
fmt.Println(sum) // 99乘法表
for i:=1;i<10;i++{
for j:=1 ;j<=i;j++{
fmt.Printf("%d * %d = %d ",j,i,j*i)
}
fmt.Println("")
}
}

0123456789


二、基于条件判断的迭代

  • 格式
for 条件语句{}

  • 实例
package main

import "fmt"

func main(){
// 求 100以内 奇数之和
var sum,i int // 多相同类型变量声明
i = 0
for i<=100{
if i % 2 != 0{
sum += i
}
i++
}
fmt.Println(sum) // 也可以这样
var sum1,j int
j = 0
for true{ // 条件永远为 true
if j % 2 != 0{
sum1 += j
}
j++
if j > 100{
break // 中断当前循环,或跳出当前循环体
}
}
fmt.Println(sum1)
}

三、无限循环

  • 格式
for{}
// 与 for true {},行为是一样的
//
  • 实例
package main

import "fmt"

func main(){
// 输入内容并打印在终端
var content string
for {
fmt.Print("请输入内容:")
fmt.Scanf("%s\n",&content) // &content 是content的内存地址
fmt.Println("你输入的内容是:",content)
}
}

四、for-range语法

  • 格式

    这是 Go 特有的一种的迭代结构,您会发现它在许多情况下都非常有用。它可以迭代任何一个集合(包括数组和 map,详见第 7 和 8 章)。语法上很类似其它语言中 foreach 语句,但您依旧可以获得每次迭代所对应的索引
for ix, val := range coll { }
  • 实例
package main

import (
"fmt"
) func main(){
str := "jmz is good man"
for index,v := range str{
// v 是 rune 类型,所以需要转化成string 类型
fmt.Println(index , " - " , string(v))
} str1:= "from 中国"
for _,v := range str1{ // _ 省略 第一个返回参数
fmt.Println(v, " - ", string(v))
} // 关于rune类型 一个字符串是unicode编码的字符。
// 下面的结果处理与上面的一样
value := []rune(str1) // 切片类型 ,将str1 转成切片类型
i := 0
for i<len(value){
fmt.Println(string(value[i]))
i++
}
}
  • 统计字符中相同字符的个数
package main

import "fmt"

func main(){
str := "上海自来水来自海上,are you know?hahahah"
count := make(map[string]int) // map 类型(引用类型)
/*
// count := make(map[string]int) 相当于:
var count map[string]int
count = make(map[string]int)
// 后面会着重讲解
*/
for _,v := range str{
count[string(v)] += 1 // 将rune 转化成string : string(v)
}
for k,v := range count{ // map 类型也可以for-range
fmt.Println(k," - ",v)
}
}

五、Break 与 continue

  • 解释
break: 跳出当前循环体(结束循环体)
continue: 跳过本次循环,进入下一次循环
  • 实例
package main

import "fmt"

func main(){
for i:= 0;i<10;i++{
if i == 3{
continue
}
if i == 6{
break
}
fmt.Println(i)
}
}
输出结果:
0
1
2
4
5

猜猜结果

  • 猜猜一
for i:=0;i<10;i++{
var j int
fmt.Println(j)
j = 5
}

10个0,j 是局部变量,每次循环都会重新声明,初始值,所以每次都是0

  • 猜猜二
for i:=0;;i++{
fmt.Println(i)
}

无限循环,一直累加

  • 猜猜三
for i:=0;i<10;{
fmt.Println(i)
}

无限循环,都是0,没有累加

  • 猜猜四
	for i,j:=2,10;i<j;{
fmt.Println(i," - ",j)
i *= 2
j ++
}

go之for循环的更多相关文章

  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. docker安装后出现Cannot connect to the Docker daemon

    启动docker service docker start docker安装后出现Cannot connect to the Docker daemon You need to add user in ...

  2. 学不好Linux?我们分析看看正确的学习方法是什么-马哥教育

    2018年里,Linux运维的职位数量和平均薪资水平仍然持续了去年的强劲增幅,比很多开发岗位涨的都快.从研究机构的数据来看,Linux职位数量和工资水平涨幅均在IT行业的前五之列,比去年的表现还要好一 ...

  3. Idea 创建maven web项目(手工创建)

    参考链接:https://www.cnblogs.com/justuntil/p/7511787.html 话不多说,直接上图: 1.创建maven项目 创建项目完成,项目结构如下: 2.项目部署配置 ...

  4. Centos7搭建ansible运维自动化工具

    1)设置主机名和hosts文件 2)配置阿里云repo源 Wget -O /etc/yum.repos.d/aliyun.repo https://mirrors.aliyun.com/repo/Ce ...

  5. js移动端 可移动滑块

    document.addEventListener('DOMContentLoaded', function() { //动态创建回到首页dom var backDom = document.crea ...

  6. 安装部署NetBeans mysql Tomact joget workflow 环境

    一.安装joget workflow 1.安装jdk 下载jdk http://www.oracle.com/technetwork/java/javase/downloads/index.html ...

  7. 有赞 MySQL 自动化运维之路 — ZanDB

    转自:https://tech.youzan.com/youzan-mysql-auto-ops-road/ 一.前言 在互联网时代,业务规模常常出现爆发式的增长.快速的实例交付,数据库优化以及备份管 ...

  8. 洛谷——P1966 火柴排队&&P1774 最接近神的人_NOI导刊2010提高(02)

    P1966 火柴排队 这题贪心显然,即将两序列中第k大的数的位置保持一致,证明略: 树状数组求逆序对啦 浅谈树状数组求逆序对及离散化的几种方式及应用 方法:从前向后每次将数插入到bit(树状数组)中, ...

  9. webpack-dev-server和webpack

    指导小伙伴在webstorm+nodejs环境下新建项目时,小伙伴出现了一个很神奇的问题:没有执行webpack-dev-server情况下,即使执行npm init,也不会出现package.jso ...

  10. Django——9 博客小案例的实现

    Django  博客小案例的实现 主要实现博客的增删改查功能 主页index.html  -->  展示添加博客和博客列表的文字,实现页面跳转 添加页add.html  --> 输入文章标 ...