Go语言学习笔记 -- 控制结构

Go中只有少量几个控制结构

if - else
Go的if-else看起来是这样的:

if x > 0 {
    return y
}
else {
    return x
}

大括号是强制要加的,这样做的目的是使代码看起来更清晰。这也是一个好的编程习惯

if 和switch接受初始化语句,通常用来初始化一个局部变量

//在Go中大括号与if必须在同一行
if err:=Chmod(0664); err != nil { 
    fmt.Print(err)
    return err
}

在Go库中,当一个if语句不会进入下一个语句流程- 当语句结束于continue,break,goto或return时 - 不必要的else会被省略

f,err := os.Open(name, os.RDONLY, 0)
if err != nil {
    return err
}
doSomething(f)

goto 语句,goto语句的标签名是大小写敏感的

for循环,3种形式

for  init;condition;post {
}

for condition {
}

for {     //死循环
}
sum := 0
for i:=0; i<10; i++ {
    sum += i
}

Go中不支持逗号表达式,++ 和 - 是语句和表达式,如果你想在循环中使用多个变量,应该使用平行赋值

for i,j = 0, len(a)-1; i < j; i,j = i+1,j-1 {
    a[i], a[j] = a[j], a[i]
}

break 和 continue
利用break可以提前终止循环

for i:=0; i < 10;i ++ {
    if i==8 {
        break;
    }
    fmt.Println(i)
}

嵌套循环中,可以在break后面指定标签,决定跳出哪一层循环

J:
    for i := 0; i < 10; i++ {
        for j := 0; j < 10; j++ {
            if j == 3 {
                break J
            }
            fmt.Println(i * j)
        }
    }

利用continue让循环进入下一个迭代,略过剩下的代码。

for i := 0; i < 10; i++ {
    if i == 5 {
        continue
    }
    fmt.Println(i)
}

range关键字可用于循环。用作迭代器。当被调用时,它从循环中返回一个键值对。

list := []string{"1", "2", "s", "haha"}
for k, v := range list {
    fmt.Printf("%v = %s\n", k, v)
}

for pos, char := range "ab中" {
    fmt.Printf("%d = %c\n", pos, char)
}

switch, Go中的switch非常强大。表达式不必式常量或整数,执行过程从上而下,直到找到匹配项,而如果switch没有表达式,它会匹配true,这产生一种可能,可以用switch编写 if - else if -else的表达式

i := 11
switch {
case i < 10:
    fmt.Println("less than 10")
    break
case i == 10:
    fmt.Println("eq 10")
    break
case i > 10:
    fmt.Println("more than 10")
    break
}

它不会匹配失败后自动往下匹配,但是可以用fallthrough使其这样做,实际在go1.8中测试,加不加fallthrough都可以实现相同额功能

i := 10
switch i {
case 11:
    fallthrough
case 10:
    fmt.Println("Balabala")

case 12:
    fmt.Println("more than 10")

}

分支可以使用逗号分隔的列表

func shouldEscape(c byte) bool {
    switch c {
    case ' ', '?', '&', '=', '#', '+':
        return true
    }
    return false
}

//比较两个字符数组的大小
func compare(a, b []byte) int {
    for i := 0; i < len(a) && i < len(b); i++ {
        switch {
        case a[i] > b[i]:
            return 1
        case a[i] < b[i]:
            return -1
        }
    }
    switch {
    case len(a) > len(b):
        return 1
    case len(b) > len(a):
        return -1
    }
    return 0
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值