#### Go 循环控制
昨天有工作要忙, 断更一天,不过学习的事情,还是每天要坚持;
我还有头发, 还能学习^_^.
***倘若我心中的山水, 你眼中都看到***
上一节学习完流程控制,总结一下switch 和 if 的区别;
1. 如果判断的具体数值不多, 而且符合整数,浮点数,字符,字符串这几种类型,建议使用switch语句;
2. 其它情况如: 区间判断和结果为bool类型的判断使用if;
---
##### for 循环控制
在Go 中只有一种循环,就是for 循环,这符合Go 的哲学思想: 少即是多;
for 基本语法:
for 循环变量初始化;循环条件;循环变量迭代{
// 循环语句
}
for 循环执行流程分析

 
for 循环注意事项和细节
1. for 条件循环返回的是一个bool 类型的表达式
2. for 循环的另一种使用方式
for 循环判断条件 {
// 循环语句
}
3. for 循环的第三种写法,类似于无限循环, 可以配合break 使用;
for {
// 循环语句
}
4. for range 方式可以方便遍历字符串和数组
5. 如果字符串含有中文,使用传统的方式遍历字符串是错误的,会出现乱码: ***传统的方式对字符串的遍历是按照字节遍历,但是一个汉字在utf8中对应的编码为3个字节;**
将 str 转成[]rune 切片即可;
package main

import "fmt"

func main(){
for i:=0;i<10;i++{
fmt.Println(i)
}
// for 循环的第二种写法
var a = 1
for a < 10 {
fmt.Println(a)
a ++
}
// for 循环的第三种写法
// 这种写法等价于无限循环, 可以配合break 使用
var b = 1
for {
if b >= 10 {
break
}
b ++
}
// for range
var c = "abcdef"
for i,val := range c {
fmt.Printf("index=%d value=%c\n",i,val)
}
// 对于有中文的字符串遍历方式
var d = "你好,世界!"
// 传统方式
str := []rune(d)
for i:=0;i<len(str);i++{
fmt.Printf("index=%d value=%c\n",i,str[i])
}
// for range 方式
for i,val := range d{
fmt.Printf("index=%d value=%c\n",i,val)
}
}

  


##### while 的实现
Go 中没有while 或者while do 这种 语法, 但是可以通过for 循环来实现这种效果,见for 循环第三种方式;
##### 多层循环
将一个循环放在另一个循环体内,形成循环嵌套, 在外面的for 称为外层循环,在里面的for 称为内层循环,多重循环建议最多不超过3层;
外层循环次数为m 次, 内层为n次, 则内层循环体实际需要执行m*n 次;
package main

import "fmt"

func main(){
for i :=1;i<10;i++{
for j :=1;j<=i;j++{
fmt.Printf("%d * %d = %d\t",j,i,i*j)
}
fmt.Println()
}
}

  


##### break

 
break 用于中断当前for 或跳出switch 语句; 默认情况下break 跳出最近的for 循环;当break 出现在多层循环中, 可以通过标签指明要终止哪一层循环;
package main

import "fmt"

func main(){
// 设置标签
first:
for i:=0;i<10;i++{
for j:=0;j<10;j++{
if j == 3 {
break first // 按标跳出
}
fmt.Println(j)
}
}
}

  


##### continue

   
continue 用于结束本次循环,继续执行下一次循环;默认情况下路过的是最近循环,当contine 出现在多层循环中, 可以通过标签指定要路过哪一层循环;
package main

import (
"fmt"
"strings"
) func main() { for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if j == 3 {
continue
}
fmt.Println(j)
}
}
fmt.Println(strings.Repeat("=",100))
first:
for i := 0; i < 10; i++ {
for j := 0; j < 10; j++ {
if j == 3 {
continue first // continue 使用标签
}
fmt.Println(j)
}
}
}

  


##### goto 语句
Go 中可以使用goto 语句无条件转移到程序中指定的行
通常与条件语句配合使用;
在Go 中不建议使用goto 以免造成程序流程混乱,使理解和调试困难;
package main

import "fmt"

func main() {
for i:=1;i<10;i++{
if i % 2 == 0 {
goto first
} else {
fmt.Println(i)
}
}
first:
fmt.Println("this is goto block")
}

  


流程控制这块基本学习完啦, 下面我们将逐渐接触高级知识;
最近在写微信公众号,欢迎大家关注,一同交流学习;


***学习,我们一直在路上***

Go 循环控制的更多相关文章

  1. Jmeter循环控制

    Jmeter循环控制 很多时候,在做接口测试时,系统处理请求需要一段时间后才能返回信息,而下一个请求需要系统返回信息后才能进行处理,这时候通常需要加入循环控制器,来验证系统是否是否返回了处理后的信息. ...

  2. C#基础总结之三循环控制-for-数组-乘法表-arraylist

    #region 第三天 作业 乘法表 ////正三角 //for (int i = 1; i < 10; i++) //{ // for (int j = 1; j <= i; j++) ...

  3. C#基础总结之二循环控制-运算符

    #region 第二天 作业2 从键盘上输入三个数,用if语句和逻辑表达式把最小数找出来. //需要:控制台输入 三个变量(a,b,c)判断这三个数其中一个最小的值 打印输出 //Console.Wr ...

  4. Java学习-005-初学常用的几个经典循环控制源代码

    最近一段时间公司 App 改版,一直处在需求评审.代码评审.测试计划.测试用例.用例评审.用例执行.缺陷管理.测试总结的循环中,因而博客也好久没有更新了.虽然工作确实忙了点,但是也是自己懒惰了,从今天 ...

  5. mysql 循环控制

    1.使用whileDROP PROCEDURE IF EXISTS `addstudent`;DELIMITER ;;CREATE PROCEDURE `addstudent`(iNum int)BE ...

  6. scjp考试准备 - 1 - 循环控制

    判断如下代码最后的执行结果. public class Breaker{ static String o = ""; public static void main(String[ ...

  7. 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,循环控制及其优化

    上两篇博客 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,数据结构“栈”实现 研究了递归方法实现回溯,解决N皇后问题,下面我们来 ...

  8. Linux Shell编程(18)—— 循环控制

    影响循环行为的命令break, continuebreak和continue这两个循环控制命令[1]与其它语言的类似命令的行为是相同的. break命令将会跳出循环,continue命令将会跳过本次循 ...

  9. Strust2 <c:forEach> 循环控制标签

    <c:forEach>为循环控制标签 语法:迭代一集合对象中的所有成员 <c:forEach [var="varName"] items="collec ...

  10. Python学习笔记——基础篇【第一周】——变量与赋值、用户交互、条件判断、循环控制、数据类型、文本操作

    目录 Python第一周笔记 1.学习Python目的 2.Python简史介绍 3.Python3特性 4.Hello World程序 5.变量与赋值 6.用户交互 7.条件判断与缩进 8.循环控制 ...

随机推荐

  1. java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal报错处理

    org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is ja ...

  2. 年底了是时候学新技术了「GitHub 热点速览 v.21.52」

    作者:HelloGitHub-小鱼干 年底了,又有新技术冒出来需要你来 Pick 了,第一个先要被 Pick 的是即将到来的元旦英文版:Happy New Year,再来的话就是这周非常火的新一代爬虫 ...

  3. 【LeetCode】728. Self Dividing Numbers 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 循环 filter函数 数字迭代 日期 题目地址:h ...

  4. 【LeetCode】473. Matchsticks to Square 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 回溯法 日期 题目地址:https://leetco ...

  5. v75.01 鸿蒙内核源码分析(远程登录篇) | 内核如何接待远方的客人 | 百篇博客分析OpenHarmony源码

    子曰:"不学礼,无以立 ; 不学诗,无以言 " <论语>:季氏篇 百篇博客分析.本篇为: (远程登录篇) | 内核如何接待远方的客人 设备驱动相关篇为: v67.03 ...

  6. <数据结构>XDOJ332.二叉排序树的判定

    问题与解答 问题描述 给定一个二叉树,判断其是否是一个有效的二叉排序树. 假设一个二叉排序树具有如下特征: 结点的左子树只包含小于当前结点的树. 结点的右子树只包含大于当前结点的树. 所有左子树和右子 ...

  7. docker学习:docker三要素

    镜像 docker 镜像(image)就是一个只读的模板.镜像可以用来创建docker容器,一个镜像可以创建很多容器 容器 docker 利用容器(Container)独立运行的一个或者一组应用.容器 ...

  8. WPF使用MVVM(一)-属性绑定

    WPF使用MVVM(一)-属性绑定 简单介绍MVVM MVVM是Model(数据类型),View(界面),ViewModel(数据与界面之间的桥梁)的缩写,是一种编程模式,优点一劳永逸,初步增加一些逻 ...

  9. Linux_接收文件(rz)和发送文件(sz)

    我们连接linux通常是使用一些ssh工具进行远程访问连接的,在使用过程中,少不了将本地文件上传到linux或将linux上的文件下载到本地,每次使用ftp比较繁琐而且浪费时间.我们可以使用linux ...

  10. navicat 找不到系统路径 【修改了系统路径中文名称引起的】

    这是我还没修改系统路径中文名称时的路径, 怎么办? 关闭当前用户连接 右键,选择连接属性 把那个改了即可