对Golang的一点认识

  1. 循环
  2. switch
  3. struct

学了一年C++后开始转向go,看了半个月的go之后感觉有些似曾相识的地方,特地总结一下.

循环

go中没有像C++/Java以及一些语言中的while循环,但是go提供的几种使用方式可以使得for循环跟while循环一样用法.

例如在C++中,我们可以写这样的一个while语句

1
2
3
4
while (i <= 3) {
std::cout << i;
i++;
}

而用go中的for循环可以这样写

1
2
3
4
for i <= 3 {
fmt.Println(i)
i++
}

类似的一些用break,return跳出的循环在C++中可以写

1
2
3
while (true) {
// do something...
}

go可以写成

1
2
3
for {
// do something...
}

switch

C++中,这个结构可以跟if-else在某些情况下可以互换.当然由于实现以及优化不同,部分情况下switch效率会更高一线(二分查询)

go中swith就显得更加强大,基本写法类似,但是不需要写break语句,这样也就减少了忘写break造成的bug.

go的switch的case语句允许用逗号分隔多个表达式,如果不写switch后的表达式,可以看作是if-else逻辑的另一种方式.

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
switch time.Now().Weekday() {
case time.Saturday, time.Sunday:
fmt.Println("it's the weekend")
default:
fmt.Println("it's a weekday")
}
t := time.Now()
switch {
case t.Hour() < 12:
fmt.Println("it's before noon")
default:
fmt.Println("it's after noon")
}

struct

说一下匿名字段,struct中包含的匿名字段既能继承成员,也可以继承匿名字段实现的方法. 暂时就是将它理解成C++中的public继承,但比较酷的是,base struct可以访问匿名类作为字段名.

如果存在重复成员命名,会优先访问base struct的成员.

script>