Go的第四课——运算符和控制流

运算符

自增(++)和自减(–)它是单独的语句,不属于运算符,其余的那些运算符跟 C 语言一模一样。

控制流

选择语句

选择结构依然是 if-else 和 switch 这两个分支语句,但是多了一个 select 语句。

if特性

没有什么过多的特性,无非就是 if 的条件不需要加括号以及后面的语句必须要和 if 在同一行。

1
2
3
4
5
6
7
if true{//通过

}
if true//不通过,因为大括号不与if在同一行
{

}

并且可以在 if 语句中进行初始化,比如下面这个例子。

1
2
3
if age:=1;age>=18{
fmt.Println("您已成年")
}

此时 age 的作用域在 if 语句中,出了这个语句这个变量失效。

switch特性

这里多了一个特性是不再会有下滑的过程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

import "fmt"

func main() {
var i = 5
switch i {
case 5:
fmt.Print("hahaha")
case 6:
fmt.Print("hehehe")
default:
fmt.Print("yingyingying")
}
}

本来上面的例程当中,应该会输出三句话的,但是实际上只会输出一句 hahaha 看来每一个 case 自动加了 break,我感觉这样倒是更加不方便了,因为平时用 switch 语句本来也就图这个方便来着的,不过既然是语言特性那也记一下。

select 语句

涉及到点概念,先 mark 下,后来再来补。

循环语句

顺序选择循环依然是这三个结构,不同的是在循环结构中, golang 删除了典型的 while 和 do-while 两个循环语句,新增了 for range 语句。

for 循环

有点坑。

  • 若想在初始化部分新定义一个变量则只能使用 i:=0 的形式定义并初始化而不能使用 var 的方式声明变量。
  • 不需要添加括号,但是初始化,循环条件,循环语句必须使用分号分隔。
1
2
3
4
5
6
7
8
9
10
package main

import "fmt"

func main() {
var a = [...]int{0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 0}
for i := 0; i < 6; i++ {
fmt.Println(a[i])
}
}

for range循环

就跟 python 里面遍历数组差不多,但是需要给两个循环变量。

1
2
3
4
5
6
7
8
9
10
package main

import "fmt"

func main() {
var a = [...]int{0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 0}
for index, value := range a {
fmt.Printf("a[%d]=%d\n", index, value)
}
}

如果不想要其中一个变量则那个变量可以使用 _ 替代

1
2
3
4
5
6
7
8
9
10
package main

import "fmt"

func main() {
var a = [...]int{0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 0}
for _, value := range a {
fmt.Printf("%d\n", value)
}
}

当然还有一个比较好用的数据类型 map,其实就可以理解为 python 的 dict。

for range 同样可以遍历这样的数据类型,我们也可以选择性地拿 key 或者 value。

for range 的对象可以是字符串,这样遍历的时候我们会拿出每一个字符,跟 python 差不多。

小结

学到现在真的感觉 go 就是 C 和 python 亲生的一样。