Go第九课-条件和循环

122 阅读1分钟

条件

  1. Go 与 C 的的控制语句的区别:

    1. Go 坚持“一件事情仅有一种做法的理念”,只保留了 for 这一种循环结构,去掉了 C 语言中的 while 和 do-while 循环结构;
    2. Go 填平了 C 语言中 switch 分支结构中每个 case 语句都要以 break 收尾的“坑”;
    3. Go 支持了 type switch 特性,让“类型”信息也可以作为分支选择的条件;
    4. Go 的 switch 控制结构的 case 语句还支持表达式列表,让相同处理逻辑的多个分支可以合并为一个分支,等等。
  2. 在 if 语句中声明自用变量是 Go 语言的一个惯用法,它的作用域仅限于 if 语句的各层隐式代码块中,if 语句外部无法访问和更改这些变量。

循环

  1. Go 语言的 for 循环支持声明多循环变量,并且可以应用在循环体以及判断条件中,

  2. 循环**与其他主要编程语言的差异:**Go 语言仅支持循环关键字 for j := 7; j <= 9; j++ {…}

    func TestLoop(t *testing.T) {
    	var n int = 5
    	for n <= 10 {
    		t.Log(n)
    		n++
    	}
    }
    
  3. if 条件与其他主要编程语⾔的差异:

    1. condition 表达式结果必须为布尔值

    2. ⽀持变量赋值

      if  var declaration;  condition {
             // code to be executed if condition is true
      }
      

switch

  1. 无论 default 分支出现在什么位置,它都只会在所有 case 都没有匹配上的情况下才会被执行的

  2. switch条件与其他主要编程语言的差异:

    1. 条件表达式不限制为常量或者整数;

    2. 单个 case 中,可以出现多个结果选项, 使⽤逗号分隔;

    3. 与 C 语⾔等规则相反,Go 语⾔不需要⽤break来明确退出⼀个 case;

    4. 可以不设定 switch 之后的条件表达式,在此种情况下,整个 switch 结构与多个 if...else... 的逻辑作用等同。

      func Test_switch(t *testing.T) {
      	for i := 0; i < 5; i++ {
      		switch i {
      		case 0, 2:
      			t.Log(i, "even")
      		case 1, 3:
      			t.Log(i, "odd")
      		default:
      			t.Log(i, ">3")
      		}
      	}
      }
      
      func Test_switch2(t *testing.T) {
      	for i := 0; i < 5; i++ {
      		switch {
      		case i%2 == 0:
      			t.Log(i, "even")
      		case i%2 == 1:
      			t.Log(i, "odd")
      		default:
      			t.Log("unKnow")
      		}
      	}
      }