if判断
基本控制语句有 if , for , switch 。
if 系列语句和 php 的一些区别,if 条件判断语句不能写小括号,并且在条件判断前可以有初始化操作语句,只能有一个初始化语句, if 下的执行语句由花括号包起来,左花括号必须与 if 同行。
如下:
if a, b := 3, 4; a == 3 {
fmt.Println(a)
fmt.Println(b)
}
上面代码块变量 a 和 b 只在当前 if 执行语句内有效,如果在 if 块外也有 a 和 b 两个变量则外部同名变量在 if 代码块内被隐藏。
要申明多个变量只能放在同一个语句里面,不能以a:=3;a:=4;这种不行。
循环
循环语句在go里面只有for循环,for循环有三种表现方式。
-
for{}
这一种是无限循环。 -
for a>3{}
这一种可以加一个条件判断,不要去尝试执行语句内不写步长。 - 还有一种for循环跟php一样,
for a:=1;a<3;a++{}
。
停止与跳转
三个跳转语句,break
,continue
,goto
Lable:
for {
for a := 1; a < 10; a++ {
if a == 5 {
break Lable
} else {
fmt.Println(a)
}
}
}
Lable 为外层 for 的标签,这个 for 是一个无限循环的 for 。
到了第二层如果 a 如果等于 5 了,则会结束到 Lable 对应的 for 。
如果把这个 break 改为 continue 的话,这就是无限循环了,continue 只是结束这一层循环继续下一层循环,改成 goto 的话会重新开始这个 for 循环。
当然,也是一个死循环。
switch 判断不需要手动 break ,符合 case 条件后会执行完语句就停止。
如果需要继续往下走需要手动加上fallthrough语句。
switch 也可以写一个初始化语句。
switch a := 2; {
case a == 2:
fmt.Println(2)
}
数组
func main() {
x, y := 1, 2
a := [2]*int{&x, &y} //保存的是指针,&取址
c := [...]int{1: 0} //...可以代替未知单元个数,会自动算出个数
var d *[2]int = &c //保存的是数组实际的值,指向数组的指针,用关键字new出来的也是指向数组的指针
var b = new([2]int)
fmt.Println(a)
fmt.Println(*a[1]) //*号取值
fmt.Println(b)
fmt.Println(d)
var s [2][3][3]int
fmt.Println(s)}
- 声明 var a [单元个数]类型,声明并赋值 a:=[单元格数]类型{索引:值},使用var就只能声明不能赋值,使用:=方式就必须得赋值,哪怕是放个空的花括号。
- 数组可以进行等于或不等于的比较,数组的长度是作为一种类型存在的,不同类型的数组不能进行比较
- 使用 new 声明的数组保存的是指向数组的本身,c := [...]int{1: 1},var d *[2]int = &c, d 保存的也是指向数组的本身。
- c 保存的则是数组本身,打印出来 c 和 d 可以看到 d 前面有个 & 符号。
- 多维数组申明,可以这么理解 s 里面有两个一维数组,每个一维数组里面有三个数组,属于二维数组,最后一个代表多少个键值对
原文链接:控制语句与数组-GOLANG
有疑问加站长微信联系(非本文作者)