人们将程序定义为数据结构+算法,而算法的实现通常都是靠程序控制来完成,因此,程序控制对于程序来说,是非常重要的部分。接下来我们来通过本文来了解下Go为我们提供的程序控制。
1、条件语句
关键字:if、else、else if
if i := 0; x == i { //注释1
return 0
} else if x == 1 { //注释2
return 1
} else {
return -1
}
注释1:这里可以自定义局部变量,作用域为这个if-else体结束。
注释2:if块不定义局部变量时与这种写法类似,如果这里也定义局部变量,则注释1处的
if语句块无法引用到这里定义的变量,else语句块可以引用。
切记:不需要()来包围条件语句,{}为必须的,且必须与关键字同行
2、选择语句
关键字:switch、case、fallthrough
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")
}
注释1:{须与switch同行,这里可以有一个初始化表达式,右侧需要跟分号
注释2:不需要明确的break来退出,默认自动退出
注释3:当i=1时输出2,3,fallthrough关键字会继续执行紧跟的下一个case代码
注释4:可以一个case中写多个满足条件(i为2,3中的一个即可)
注释5:以上的都不匹配时执行
switch后面的表达式不是必需的,这种结构与多个if...else if的逻辑作用等同
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")
}
注释1:{这里可以有一个初始化表达式,右侧需要跟分号,如本行可写为switch i := 0; {
3、循环语句
关键字:for、range、break、continue
1)for语句的多种格式
格式1:
sum := 0
for i := 0; i < 10; i++ { //注释1
sum += i
}
注释1:不需要()来包围条件语句,{}为必须有的,且{必须与关键字同行
格式2:
i, sum := 0, 0
for { //注释1
if i == 10 {
break
}
sum += i
i++
}
注释1:类似于Java中的while(true)写法
格式3:
i, sum := 0, 0
for i < 10 {
sum += i
i++
}
2)数组或切片(后面讲解)的两种遍历方式
写法1:
mySlice := []int{1, 2, 3, 4} //注释1
sum := 0
for i, l := 0, len(mySlice); i < l; i++ { //注释2
sum += mySlice[i]
}
注释1:定义一个slice
注释2:赋值语句支持多重赋值(仅支持平行多重赋值)
写法2:
for i, v := range mySlice { //注释1
sum += v //注释2
//sum +=mySlice[i]
}
注释1:range有两个返回值,i为索引,v为值。当对map(后面讲解)进行遍历时,range的返回值分别为key,value
注释2:这里要注意i没有使用,编译错误,请使用_代替
4、跳转语句
关键字:goto,其实break及continue也有跳转的功能
三个语法都可以配合标签使用,标签区分大小写
goto 标签名:调整程序执行位置,标签可以在语句之后定义
break 标签名:结束与标签同级的for循环,标签必须在语句之前定义
continue 标签名:结束与标签同级的for循环,标签必须在语句之前定义
Label1: //定义名为"Label1"的标签
for { //无限循环
for i := 0; i < 10; i++ {
if i > 3 {
break Label1 //直接结束Label1同级的for
}
}
}
goto、continue的使用大体类似
一路过来,我们发现其实Go是一门非常简单的语言,有其它编程语言基础同学看完这几篇博文触类旁通的就懂了,仅仅写法上的差异,别急,后面的文章将会介绍些Go比较独有的特性。
无闻(unknow)《Go编程基础》
许式伟的 《Go语言编程》
有疑问加站长微信联系(非本文作者)