第3课 Go控制,循环,选择,跳转语句

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lhdalhd1996/article/details/52050201
package main

import (
    "fmt"
)

func main() {
    /*
        Go虽然保留了指针,但是其与其他编程语言不同的是,在Go中不支持
        指针运算以及“->”运算符,而是直接采用“.”选择符来操作指针目标
        对象的成员

        操作符“&”取变量地址,使用“*”通过指针间接访问目标对象
        默认值nil而非NULL
    */
    a := 1
    var p *int = &a
    fmt.Println(*p) //输出1
    //指针

    /*
        ++和--是作为语句而非表达式
        表达式可以放在=右边
        所以现在a++只能作为单独的一行
    */
    a--
    fmt.Println(*p) //输出0

    if 1 < 2 { //左大括号必须放在if同一行
    } //if的一种用法

    if a := 1; a > 1 { //初始化语句;条件语句
    } //if的另一种用法,注意这个a的作用域只有在if语句块中
    //并且覆盖上面的a,当if执行完后,a变成了外部语句的a

    /*
        循环语句for
        -Go中只有for一个循环语句关键字,但是支持三种形式初
        -始化和步进表达式可以是多个值
        -条件语句每次循环都会被重新检查,因此不建议在条件语
        句中使用函数,尽量提前计算好条件并以变量或常量代替
        -左大括号必须和条件语句在同一行
    */
    fmt.Println("-----")

    aa := 1
    for {
        aa++
        if aa > 3 {
            break
        }
        fmt.Println(aa)
    }
    fmt.Println("over")
    //第一种形式
    fmt.Println("-----")

    for aa <= 3 {
        aa++
        fmt.Println(aa)
    }
    //第二种形式
    fmt.Println("-----")

    for i := 0; i < 3; i++ {
        fmt.Println("第三种")
    }
    //第三种形式(步进表达式)

    /*
        选择语句switch
        -可以使用任何类型或表达式作为条件语句
        -不需要写break
        -如果希望继续执行下一个case,则需要使用fllthrough语句
        -支持一个初始化表达式(可以是并行方式),右侧需跟分号
        -左大括号必须和条件语句在同一行
    */
    fmt.Println("-----")

    b := 1
    switch b {
    case 0:
        fmt.Println("a=0")
    case 1:
        fmt.Println("a=1")
    default:
        fmt.Println("None")
    }
    fmt.Println("-----")

    switch bb := 1; { //这个bb的作用域也是代码块内
    case bb >= 0:
        fmt.Println("bb>=0")
    case bb >= 1:
        fmt.Println("bb>=1")
    default:
        fmt.Println("None")
    }
    fmt.Println("-----")

    /*
        跳转语句goto,break,continue
        -三个语法都可以配合标签使用
        -标签名区分大小写,若创建了标签不使用会出现编译错误
        -break与continue配合标签可用于多层循环的跳出
        -goto是调整执行位置,与其它2个语句配合标签的结果并不相同
    */
LABEL1:
    for {
        for i := 0; i < 10; i++ {
            if i > 3 {
                break LABEL1
            }
        }
    }
    fmt.Println("跳出循环!")
    //使用break LABEL1 会跳出与LABEL1同一级别的循环,注意,与LABEL1同一级别的循环
    //显然如果用goto,会调整执行位置,无限循环下去
    //如果用continue,也会跳出LABEL1一级别的循环,在这里为无限循环,必须做如下调整:
LABEL2:
    for i := 0; i < 10; i++ {
        for {
            continue LABEL2
            fmt.Println(i) //本条语句永远不会执行
        }
    }
    fmt.Println("跳出循环!")
    //如果把contain换成goto,肯定结果还是无限循环!
}

运行结果:
1
0
—–
2
3
over
—–
—–
第三种
第三种
第三种
—–
a=1
—–
bb>=0
—–
跳出循环!
跳出循环!

猜你喜欢

转载自blog.csdn.net/lhdalhd1996/article/details/52050201
今日推荐