原创 lightcity 光城 2019-03-23
Go从入门到精通之条件与循环
0.导语
本节续学上节Go,先来谈谈算数运算符以及一起特殊运算符操作,最后学习本节的重点:条件与循环。(学习来自极客时间Go课程)。
1.运算符
算数运算符
Go语言没有前置的++,--
用==比较数组
在其他语言当中,用==比较是比较两个数组的引用,而不是值,但是Go不一样。
相同维数且含有相同个数元素的数组才可以比较
每个元素都相同的才相等
位运算符
&^按位零 ,如下:
11 & ^0 --- 1
21 & ^1 --- 0
30 &^ 1 --- 0
40 &^ 0 --- 0
上述综合例子:
1package operator_test
2import (
3 "testing"
4)
5func TestCompareArray(t *testing.T) {
6 a := [...]int{1, 2, 3, 4}
7 b := [...]int{1, 3, 4, 5}
8 // c := [...]int{1, 2, 3, 4, 5}
9 d := [...]int{1, 2, 3, 4}
10 t.Log(a == b) //false 长度,维数都相同,但元素不同
11 //数组长度不同,编译错误!
12 // t.Log(a == c) //invalid operation: a == c (mismatched types [4]int and [5]int)
13 t.Log(a == d) //true 长度,维数相同,元素都相同
14}
15const (
16 Readable = 1 << iota //1
17 Writable //10
18 Executable //100
19)
20func TestBitClear(t *testing.T) {
21 a := 7 //0111
22 a = a &^ Readable
23 a = a &^ Executable
24 t.Log(a&Readable == Readable, a&Writable == Writable, a&Executable == Executable) //false true false
25}
2.循环
Go语言仅支持循环关键字for
c/c++中
1for(j:=7;j<=9;j++)
Go中 不需要前后括号!
while
条件循环
while(n<5)
可表示为:
1n:=0
2for n<5 {
3 n++
4 fmt.Println(n)
5}
无限循环
while(true)
可表示为:
1n:=0
2for {
3 ...
4}
if条件
不需要()
1if condition {
2 ...
3} else if {
4 ...
5} else {
6 ...
7}
与其他主要编程语言的差异:
condition表达式结果必须为布尔值
支持变量赋值(可以用来判断函数返回值)
1if var declaration; condition {
2 ...
3}
4if v,err := someFunc(); err==nil {
5 ...
6} else {
7 ...
8}
switch 条件
不限制常量或整数表达式
1switch os := runtime.GOOS; os{
2case "darwin":
3 ...
4case "linux":
5 ...
6default:
7 ...
Go语言中默认是添加了break,可以不用添加!
上述综合例子:
1package condition_test
2import (
3 "testing"
4)
5func TestIfMultiSec(t *testing.T) {
6 if a := 1 == 1; a {
7 t.Log("1==1")
8 }
9
10 for i := 0; i < 5; i++ {
11 switch i {
12 case 0, 2:
13 t.Log("Even")
14 case 1, 3:
15 t.Log("Odd")
16 default:
17 t.Log("it is not 0-3")
18 }
19 }
20 for i := 0; i < 5; i++ {
21 switch { //这里没有switch表达式!在此种情况下,整个switch结构与多个if...else...的逻辑作用等同
22 case i%2 == 0:
23 t.Log("Even")
24 case i%2 == 1:
25 t.Log("Odd")
26 default:
27 t.Log("unknow")
28 }
29 }
30}
31func TestWhileLoop(t *testing.T) {
32 n := 0
33 for n < 5 {
34 t.Log(n)
35 n++
36 }
37}
总结:
(1)条件表达式不限制为常量或整数表达式
(2)单个case中,可以出现多个结果选项,使用逗分隔;
(3)与C语言等规则相反,Go语言不需要用break来明确退出一个case;
(4)可以不设定switch之后的条件表达式,在此种情况下,整个switch结构与多个if…else…的逻辑作用等同。
有疑问加站长微信联系(非本文作者)