Go语言3-程序控制
2015-06-03 22:53
405 查看
人们将程序定义为数据结构+算法,而算法的实现通常都是靠程序控制来完成,因此,程序控制对于程序来说,是非常重要的部分。接下来我们来通过本文来了解下Go为我们提供的程序控制。
1、条件语句
2、选择语句
3、循环语句
4、跳转语句
一路过来,我们发现其实Go是一门非常简单的语言,有其它编程语言基础同学看完这几篇博文触类旁通的就懂了,仅仅写法上的差异,别急,后面的文章将会介绍些Go比较独有的特性。
无闻(unknow)《Go编程基础》
许式伟的 《Go语言编程》
1、条件语句
[code] 关键字:if、else、else if
[code] if i := 0; x == i { //注释1 return 0 } else if x == 1 { //注释2 return 1 } else { return -1 }
[code] 注释1:这里可以自定义局部变量,作用域为这个if-else体结束。 注释2:if块不定义局部变量时与这种写法类似,如果这里也定义局部变量,则注释1处的 if语句块无法引用到这里定义的变量,else语句块可以引用。
[code] 切记:不需要()来包围条件语句,{}为必须的,且必须与关键字同行
2、选择语句
[code] 关键字:switch、case、fallthrough
[code] switch i { //注释1 case 0: //注释2 fmt.Printf("0") case 1: //注释3 fallthrough case 2, 3: //注释4 fmt.Printf("2,3,4") default: //注释5 fmt.Printf("Default") }
[code] 注释1:{须与switch同行,这里可以有一个初始化表达式,右侧需要跟分号 注释2:不需要明确的break来退出,默认自动退出 注释3:当i=1时输出2,3,fallthrough关键字会继续执行紧跟的下一个case代码 注释4:可以一个case中写多个满足条件(i为2,3中的一个即可) 注释5:以上的都不匹配时执行
[code] switch后面的表达式不是必需的,这种结构与多个if...else if的逻辑作用等同
[code] switch { //注释1 case 0 == i: fmt.Printf("0") case 1 == i: fallthrough case 2 == i || 3 == i: fmt.Printf("2,3,4") default: fmt.Printf("Default") }
[code] 注释1:{这里可以有一个初始化表达式,右侧需要跟分号,如本行可写为switch i := 0; {
3、循环语句
[code] 关键字:for、range、break、continue 1)for语句的多种格式 格式1:
[code] sum := 0 for i := 0; i < 10; i++ { //注释1 sum += i }
[code] 注释1:不需要()来包围条件语句,{}为必须有的,且{必须与关键字同行
[code] 格式2:
[code] i, sum := 0, 0 for { //注释1 if i == 10 { break } sum += i i++ }
[code] 注释1:类似于Java中的while(true)写法
[code] 格式3:
[code] i, sum := 0, 0 for i < 10 { sum += i i++ }
[code] 2)数组或切片(后面讲解)的两种遍历方式 写法1:
[code] mySlice := []int{1, 2, 3, 4} //注释1 sum := 0 for i, l := 0, len(mySlice); i < l; i++ { //注释2 sum += mySlice[i] }
[code] 注释1:定义一个slice 注释2:赋值语句支持多重赋值(仅支持平行多重赋值)
[code] 写法2:
[code] for i, v := range mySlice { //注释1 sum += v //注释2 //sum +=mySlice[i] }
[code] 注释1:range有两个返回值,i为索引,v为值。当对map(后面讲解)进行遍历时,range的返回值分别为key,value 注释2:这里要注意i没有使用,编译错误,请使用_代替
4、跳转语句
[code] 关键字:goto,其实break及continue也有跳转的功能 三个语法都可以配合标签使用,标签区分大小写 goto 标签名:调整程序执行位置,标签可以在语句之后定义 break 标签名:结束与标签同级的for循环,标签必须在语句之前定义 continue 标签名:结束与标签同级的for循环,标签必须在语句之前定义
[code] Label1: //定义名为"Label1"的标签 for { //无限循环 for i := 0; i < 10; i++ { if i > 3 { break Label1 //直接结束Label1同级的for } } }
[code] goto、continue的使用大体类似
一路过来,我们发现其实Go是一门非常简单的语言,有其它编程语言基础同学看完这几篇博文触类旁通的就懂了,仅仅写法上的差异,别急,后面的文章将会介绍些Go比较独有的特性。
无闻(unknow)《Go编程基础》
许式伟的 《Go语言编程》
相关文章推荐
- 拟牛顿法/Quasi-Newton,DFP算法/Davidon-Fletcher-Powell,及BFGS算法/Broyden-Fletcher-Goldfarb-Shanno
- OC基础学习——Block语法的学习和Category与Extension的初步认识
- Django. No changes detected when "makemigrations"
- golang web开发获取get、post、cookie参数
- Django学习(六) 模板
- golang学习(二)
- gRPC的简单Go例子
- 解决RelativeLayout中 gone之后的布局错位问题。RelativeLayout的alignWithParentIfMissing
- hdoj2151简单的计数DP
- 关于GoogleMap的使用经验
- go安装
- HDOJ2059简化记录条件找出问题本质DP
- Bandwagon Host – 64M内存 1.5G硬盘 100G流量 年3.99美金
- Algorithms—36.Valid Sudoku
- googlemock
- Go语言命令行操作命令详细介绍
- Godaddy Drupal Update
- 理解Golang包导入
- go语言执行windows下命令行的方法
- golang开发环境搭建