前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go从入门到精通之条件与循环

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

作者头像
公众号guangcity
发布2019-09-20 15:41:26
3950
发布2019-09-20 15:41:26
举报
文章被收录于专栏:光城(guangcity)光城(guangcity)

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

0.导语

本节续学上节Go,先来谈谈算数运算符以及一起特殊运算符操作,最后学习本节的重点:条件循环。(学习来自极客时间Go课程)。

1.运算符

算数运算符

Go语言没有前置的++,--

用==比较数组

在其他语言当中,用==比较是比较两个数组的引用,而不是值,但是Go不一样。

  • 相同维数且含有相同个数元素的数组才可以比较
  • 每个元素都相同的才相等

位运算符

&^按位零 ,如下:

代码语言:javascript
复制
1 & ^0 --- 1
1 & ^1 --- 0
0 &^ 1 --- 0
0 &^ 0 --- 0

上述综合例子:

代码语言:javascript
复制
package operator_test
import (
    "testing"
)
func TestCompareArray(t *testing.T) {
    a := [...]int{1, 2, 3, 4}
    b := [...]int{1, 3, 4, 5}
    // c := [...]int{1, 2, 3, 4, 5}
    d := [...]int{1, 2, 3, 4}
    t.Log(a == b) //false 长度,维数都相同,但元素不同
    //数组长度不同,编译错误!
    // t.Log(a == c) //invalid operation: a == c (mismatched types [4]int and [5]int)
    t.Log(a == d) //true 长度,维数相同,元素都相同
}
const (
    Readable   = 1 << iota //1
    Writable               //10
    Executable             //100
)
func TestBitClear(t *testing.T) {
    a := 7 //0111
    a = a &^ Readable
    a = a &^ Executable
    t.Log(a&Readable == Readable, a&Writable == Writable, a&Executable == Executable) //false true false
}

2.循环

Go语言仅支持循环关键字for

c/c++中

代码语言:javascript
复制
for(j:=7;j<=9;j++)

Go中 不需要前后括号!

while条件循环

while(n<5)可表示为:

代码语言:javascript
复制
n:=0
for n<5 {
    n++
    fmt.Println(n)
}

无限循环

while(true)可表示为:

代码语言:javascript
复制
n:=0
for {
    ...
}

if条件

不需要()

代码语言:javascript
复制
if condition {
    ...
} else if {
    ...
} else {
    ...
}

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

  • condition表达式结果必须为布尔值
  • 支持变量赋值(可以用来判断函数返回值)
代码语言:javascript
复制
if var declaration; condition {
    ...
}
if v,err := someFunc(); err==nil {
    ...
} else {
    ...
}

switch 条件

不限制常量整数表达式

代码语言:javascript
复制
switch os := runtime.GOOS; os{
case "darwin":
    ...
case "linux":
    ...
default:
    ...

Go语言中默认是添加了break,可以不用添加!

上述综合例子:

代码语言:javascript
复制
package condition_test
import (
    "testing"
)
func TestIfMultiSec(t *testing.T) {
    if a := 1 == 1; a {
        t.Log("1==1")
    }

    for i := 0; i < 5; i++ {
        switch i {
        case 0, 2:
            t.Log("Even")
        case 1, 3:
            t.Log("Odd")
        default:
            t.Log("it is not 0-3")
        }
    }
    for i := 0; i < 5; i++ {
        switch { //这里没有switch表达式!在此种情况下,整个switch结构与多个if...else...的逻辑作用等同
        case i%2 == 0:
            t.Log("Even")
        case i%2 == 1:
            t.Log("Odd")
        default:
            t.Log("unknow")
        }
    }
}
func TestWhileLoop(t *testing.T) {
    n := 0
    for n < 5 {
        t.Log(n)
        n++
    }
}

总结

(1)条件表达式不限制为常量或整数表达式

(2)单个case中,可以出现多个结果选项,使用逗分隔;

(3)与C语言等规则相反,Go语言不需要用break来明确退出一个case;

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 光城 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Go从入门到精通之条件与循环
    • 0.导语
      • 1.运算符
        • 2.循环
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档