Skip to content

Latest commit

 

History

History
105 lines (91 loc) · 3.02 KB

04.控制语句.md

File metadata and controls

105 lines (91 loc) · 3.02 KB

指针

Go 虽然保留了指针,但与其他变成语言不同的是,在 Go 当中不支持指针运算以及 -> 运算符,而直接采用 . 选择符来操作指针目标对象的成员
-操作符 & 取变量地址, 使用 * 通过指针间接访问目标对象
-默认值为 nil 而非 NULL

递增递减语句

在 Go 中, ++-- 是作为语句而不是作为表达式,只能放在变量右边

判断语句 if

-条件表达式没有括号
-支持一个初始化表达式(可以是并行方式)
-左括号必须和条件语句或 else 在同一行
-支持单行模式
-初始化语句中的变量为 block 级别,同时因此外部同名变量
-1.0.3版本中的编辑器BUG

a := 10
if a := 1; a > 0 {
    //结果为 1
    fmt.Println(a)
}
//结果为 10
fmt.Println(a)

循环语句 for

-Go 只有 for 一个循环语句关键字,但支持3种形式
-初始化和步进表达式可以是多个值
-条件语句每次循环都会被重新检查,因此不建议在条件语句中使用函数
-左括号必须和条件语句在同一行

a := 1
for {
    a++
    if a > 3 {
        //跳出循环
        break
    }
}

for a <= 3 {
    a ++
    fmt.Println(a)
}

for i := 0; i < 3; i++ {
    a++
    fmt.Println(a)
}

选择语句 switch

-可以使用任何类型或表达式作为条件语句
-不需要写 break ,一旦条件符合自动终止
-如希望继续执行下个 case ,需使用 fallthrough 语句
-支持一个初始化表达式(可以是并行方式),右侧需跟分号
-左括号必须和条件语句在同一行

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

//case中判断
switch {
    case a == 0:
        fmt.Println("a=0")
        //使用 fallthrough 判断成立时继续判断下个判断语句,不跳出
        fallthrough
    case a == 1:
        fmt.Println("a=1")
    default:
        fmt.Println("None")
}

switch a := 1; {
    //...
}

跳转语句 gotobreackcontinue

-三个语法都可以配合标签使用
-标签名区分大小写,若不使用会造成编译错误
-breakcontinue 配合标签可用于多层循环嵌套的跳出
-goto 是调整执行位置,与其他2个语句配合标签的结果并不相同

//定义循环体LABEL1 
LABEL1:
    for {
        for i := 0; i < 10; i++ {
            if i > 3 {
                //跳出LABEL1
                break LABEL1
                //跳到LABEL2
                goto LABEL2
            }
        }
    }
    fmt.Println("OVER")

//定义循环体LABEL2
LABEL2:
    fmt.Println("OK")