Go从入门到精通之条件与循环

mb600aa45a054a0 · · 425 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

原创 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{1234}
7    b := [...]int{1345}
8    // c := [...]int{1, 2, 3, 4, 5}
9    d := [...]int{1234}
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    ...
3else if {
4    ...
5else {
6    ...
7}

与其他主要编程语言的差异:

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

  • 支持变量赋值(可以用来判断函数返回值)

1if var declaration; condition {
2    ...
3}
4if v,err := someFunc(); err==nil {
5    ...
6else {
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 02:
13            t.Log("Even")
14        case 13:
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…的逻辑作用等同。



有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:mb600aa45a054a0

查看原文:Go从入门到精通之条件与循环

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

425 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传