Go语言实战学习之流程控制详解

目录
  • 1. 前言
  • 2. if分支
  • 3. for及for-range循环
  • 4. switch-case-fallthrough分支
  • 5. goto
  • 6. break和continue
  • 7. 跳出嵌套循环
  • 8. 最后

1. 前言

这里还是再总结一下流程控制,和其它语言相比做了一些优化,比如相比c增加了迭代器类型的for循环,switch针对c中容易出问题的地方做了一些修改,避免出现缺少break时存在的常见问题,此外,和Java类似也存在跳出循环和多层嵌套的方法,C中容易造成使用不当的goto也同样支持,在解决比较麻烦的go错误处理时goto有奇效,但基本上还是不太建议使用。

本次总结的内容主要如下:

2. if分支

if语句基本和C语言的if类似(由于Go的语法不需要括号以及使用分号换行,所以写起来是更加高效的):

if xxx {
    xxx
} else if {
    xxx
} else if {
    xxx
} else {
    xxx
}

示例:

判断任意年份是否为闰年,需要满足以下条件中的任意一个:

① 该年份能被 4 整除同时不能被 100 整除;

② 该年份能被400整除。

package main

import "fmt"

func main() {
	var a int
	fmt.Println("请输入年份:")
	fmt.Scan(&a)
	if a % 400 == 0 {
		fmt.Println("该年是闰年")
	} else if (a % 4 == 0) && (a % 100 != 0) {
		fmt.Println("该年是闰年")
	} else {
		fmt.Println("该年不是闰年")
	}
}

结果:

3. for及for-range循环

除了传统的for循环,目前较新的语言都是支持迭代器方式的for循环的,go也不例外,通过range关键词来迭代获取对应的key、value值进行迭代进行循环。

示例:

package main

import "fmt"

func main() {
	var i int
	sum := 0
	for i = 0; i < 100; i++ {
		sum+=i
	}
	fmt.Println(sum)

	arr := [...]int{1,2,3,4,5}
	for k,v := range arr {
		fmt.Println(k, v)
	}
}

结果:

4. switch-case-fallthrough分支

在C中switch-case之后跳出某个分支是需要break的,新手往往会忘记break从而引起bug,因此在Go中去掉了分支结束需要break跳出的方式,case分支结束后就自动跳出该分支了;对于某些特殊需求比如多个case分支共用一个执行语句或这个分支结束后想继续执行下一个分支,那么使用fallthrough来避免执行后跳出对应的case分支,当然,这种方式是不提倡的。

示例:

package main

import "fmt"

func main() {
	var a int
	fmt.Println("请输入1-7:")
	fmt.Scan(&a)
	switch a {
	case 1:
		fmt.Println("星期一")
	case 2:
		fmt.Println("星期二")
	case 3:
		fmt.Println("星期三")
	case 4:
		fmt.Println("星期四")
	case 5:
		fmt.Println("星期五")
	case 6:
		fmt.Println("星期六")
	case 7:
		fmt.Println("星期天")
	default:
		fmt.Println("未知")
	}

	//fallthrough
	switch a {
	case 1:
		fmt.Println("星期一")
	case 2:
		fmt.Println("星期二")
	case 3:
		fmt.Println("星期三")
	case 4:
		fmt.Println("星期四")
	case 5:
		fmt.Println("星期五")
	case 6:
		fmt.Println("星期六")
		fallthrough
	case 7:
		fmt.Println("周末")
	default:
		fmt.Println("未知")
	}
}

结果:

5. goto

goto语句我觉得处理错误时比较好用,因为没有抛出异常,很可能会出现很多判断err的情况,这种的可以使用goto统一处理,但是怎么说那,goto语句这种跳转还是会造成一定的风险,基本上还是不太建议使用。

示例:

package main

import "fmt"

func main() {
	var a int
	fmt.Println("请输入1-7:")
	_, err := fmt.Scan(&a)
	if err != nil {
		goto errTodo
	}

	_, err = fmt.Println(a)
	if err != nil {
		goto errTodo
	}

errTodo:
	fmt.Println("错误处理")
}

结果:

6. break和continue

由于go没有while循环,一般是使用for循环来代替的,要跳出循环或者逻辑判断后直接进行下一次循环的话还是需要break和continue。

示例:

package main

import "fmt"

func main() {
	for {
		var a int
		fmt.Println("请输入1-7:")
		_, err := fmt.Scan(&a)
		if err != nil {
			fmt.Println(err)
			continue
		}

		if (a < 1) || (a > 7) {
			fmt.Println("非法的输入")
			continue
		}

		if (a >= 1) && (a <= 7) {
			fmt.Println("输入正确:", a)
			break
		}
	}
}

结果:

7. 跳出嵌套循环

对于嵌套循环,我们有时候需要跳出外层循环,这时go也是借助于类似Java等的命名空间的方式break跳出嵌套循环。

示例:

package main

import "fmt"

func main() {
	first:for i := 0; i < 5; i++ {
		for j := 0; j < 5; j++ {
			fmt.Println(i * j)
			if i * j == 4 {
				break first
			}
		}
	}
}

结果(可以试一下不加first只有break的话会跳出到哪里):

8. 最后

基本上流程控制就这些了,相较于C,go去除了while循环,for循环完全是足够的,增加了for range这种迭代方式的循环,此外,switch上也去除了容易犯错的必须加break的地方,对于有特殊需求的也增加了fallghrough来处理,嵌套循环跳出的方式和Java等是比较类似的。

到此这篇关于Go语言实战学习之流程控制详解的文章就介绍到这了,更多相关Go语言 流程控制内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Go语言流程控制详情

    目录 1.流程控制 2.if 语句 3.goto 4.for语句 5.switch 1.流程控制 流程控制在编程语言中是最伟大的发明了,因为有了它,你可以通过很简单的流程描述来表达很复杂的逻辑. 流程控制包含分三大类:条件判断,循环控制和无条件跳转. 2.if 语句 if 也许是各种编程语言中最常见的了,它的语法概括起来就是: 如果满足条件就做某事,否则做另一件事. Go 里面 if 条件判断语句中不需要括号,如下代码所示: if x > 10 {     fmt.Println("x i

  • Go语言中的流程控制结构和函数详解

    这小节我们要介绍Go里面的流程控制以及函数操作. 流程控制 流程控制在编程语言中是最伟大的发明了,因为有了它,你可以通过很简单的流程描述来表达很复杂的逻辑.Go中流程控制分三大类:条件判断,循环控制和无条件跳转. if if也许是各种编程语言中最常见的了,它的语法概括起来就是:如果满足条件就做某事,否则做另一件事. Go里面if条件判断语句中不需要括号,如下代码所示: 复制代码 代码如下: if x > 10 {     fmt.Println("x is greater than 10&

  • Golang通脉之流程控制详情

    目录 1.if else(分支结构) 1.1 if条件判断基本写法 1.2 if条件判断特殊写法 2.for(循环结构) 2.1 无限循环 3.for range(键值循环) 4.switch case 5.goto(跳转到指定标签) 6.break(跳出循环) 7.continue(继续下次循环) 前言: 流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的"经脉". Go语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码.

  • Go语言流程控制语句

    1.条件语句 几个注意点和C#不一样的. if a < 5 { return 0 } else { return 1 } ① 条件语句不需要使用括号将条件包含起来 a<5 ,C#必须有() ②无论语句体内有几条语句,花括号{}都是必须存在的:C#如果只有一条语句可以省略{} ③左花括号{必须与if或者else处于同一行 C#的{}是换行的 ④在有返回值的函数中,不允许将“最终的”return语句包含在if...else...结构中, 否则会编译失败(这句话错误的 1.1版Go语言和之后的新版已

  • go流程控制代码详解

    if •Go里面if条件判断语句中不需要括号,条件判断语句里面允许声明一个变量,任何在这里声明的变量都可以在所有的条件分支中使用. if x := 11; x > 10 { fmt.Println("x is greater than 10") } else { fmt.Println("x is less than 10") } goto •用goto跳转到必须在当前函数内定义的标签,标签名是大小写敏感的. func myFunc() { i := 0 He

  • Go语言实战学习之流程控制详解

    目录 1. 前言 2. if分支 3. for及for-range循环 4. switch-case-fallthrough分支 5. goto 6. break和continue 7. 跳出嵌套循环 8. 最后 1. 前言 这里还是再总结一下流程控制,和其它语言相比做了一些优化,比如相比c增加了迭代器类型的for循环,switch针对c中容易出问题的地方做了一些修改,避免出现缺少break时存在的常见问题,此外,和Java类似也存在跳出循环和多层嵌套的方法,C中容易造成使用不当的goto也同样

  • Python中的流程控制详解

    流程控制无非就是if else之类的控制语句,今天我们来看一下Python中的流程控制会有什么不太一样的地方. while语句 python中的while语句和其他语言没有什么不一样,我使用while语句来编写一个斐波拉赫数列: In [56]: while x < 10 : ...: print(x) ...: x, y = y, x+y ...: 0 1 1 2 3 5 8 if 语句 python中的 if 可以和 elif 或者 else 配合使用: >>> x = int

  • C#流程控制详解

    目录 流程控制语句分类 1.if语句 2.switch 3.三位运算符 4.迭代语句之while语句 4.1 迭代语句概述 4.2 while语句 5.迭代语句之do……while 6.迭代语句之for循环语句 7.迭代语句之foreach 8.跳转语句之break语句 9.continue语句 10.跳转语句之return 11.跳转语句之goto 12.任务实施 流程控制语句分类 分支语句: if语句和switch语句 迭代语句 跳转语句 1.if语句 if (判断条件表达式){ 表达式结果

  • Javascript基础:运算符与流程控制详解

    目录 1. 运算符(操作符) 1.1 算数运算符 1.2 递增和递减运算符 1.3 比较运算符 1.4 逻辑运算符 1.5 赋值运算符 1.6 运算符优先级 2. 流程控制 2.1 if 的语法结构 2.2 if else双分支语句 2.3 if else if语句(多选1) 2.4 三元表达式 2.5 switch分支流程控制 总结 1. 运算符(操作符) 「运算符」是用于实现赋值.比较和执行算数运算等功能的符号.常用运算符分类如下 算数运算符 递增和递减运算符 比较运算符 逻辑运算符 赋值运

  • Go语言入门学习之Channel通道详解

    目录 前言 通道的声明 通道的初始化 发送和接收数据 通道的关闭 通道的容量与长度 缓冲通道与无缓冲通道 双向通道和单向通道 遍历通道 fibonacci 数列 参考文章: 总结 前言 不同于传统的多线程并发模型使用共享内存来实现线程间通信的方式,go 是通过 channel 进行协程 (goroutine) 之间的通信来实现数据共享. channel,就是一个管道,可以想像成 Go 协程之间通信的管道.它是一种队列式的数据结构,遵循先入先出的规则. 通道的声明 每个通道都只能传递一种数据类型的

  • python学习 流程控制语句详解

    ###################### 分支语句 python3.5 ################ #代码的缩进格式很重要 建议4个空格来控制 #根据逻辑值(True,Flase)判断程序的运行方向 # Ture:表示非空的量(String,tuple元组 .list.set.dictonary),所有非零的数字 # False:0,None .空的量 #逻辑表达式 可以包含 逻辑运算符 and or not if: ##################################

  • Python学习之流程控制与条件判断总结

    目录 初识条件判断(逻辑判断) 逻辑判断与逻辑语句 if语句 关于逻辑判断应用的总结 if…else…语句 elif语句 关于条件判断的条件嵌套 条件语句的总结 关于条件语句的小练习 初识条件判断(逻辑判断) 逻辑判断与逻辑语句 什么是逻辑判断? —> 对于一件事情的正确与否的判断,即 真假的判断:在 python 中,我们使用 bool 类型来判断真与假,对与错. 什么是逻辑业务? —> 根据逻辑判断的结果做不同的事情,就是我们需要做的逻辑业务. 什么是条件语句? —> 对于条件满足的

  • Go语言学习之运算符使用详解

    目录 1.算术运算符 2.关系运算符 3.逻辑运算符 4.位运算符 5.赋值运算符 6.特殊运算符 1.算术运算符 很常规,和java一样. 样例代码如下 // 算术运算符 func base() { a := 1 b := 20 c := 31 d := -1 fmt.Printf(" + -> %d\n", a+b) fmt.Printf(" - -> %d\n", b-a) fmt.Printf(" * -> %d\n",

  • C语言分别实现栈和队列详解流程

    目录 什么是栈 栈的结构图示 栈的实现 创建栈的结构体 初始化栈 入栈 出栈 获取栈顶元素 获取栈中有效元素个数 检测栈是否为空 栈的销毁 什么是队列? 队列的实现 创建队列结构体 初始化队列 队尾入队列 队头出队列 获取队列头部元素 获取队列尾部元素 获取队列中元素个数 检测队列是否为空 销毁队列 什么是栈 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素的操作.进行数据插入和删除的一端称为栈顶,另一端称为栈底.栈中的数据元素遵守先进后出LIFO(Last In First Out

  • Go语言学习之文件操作方法详解

    目录 引言 1. 打开和关闭文件 2. 读取文件 2.1 defer 语句 2.2 手动宕机处理 2.3 打开文件并获取内容 2.4 bufio 读取文件 2.5 ioutil 读取文件 2.6 读取奇偶行内容 3. 写入文件 3.1 os.OpenFile() 函数 3.2 Write 和 WriteString 方式写入 3.3 bufio.NewWriter 方式写入 3.4 ioutil.WriteFile 方式写入 引言 计算机的文件是存储再外部介质(硬盘)上的数据集合,文件分为文本文

随机推荐