go 判断语句

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

package main

import (
    "fmt"
)

func main() {
    a := 1
    var p *int = &a
    fmt.Println(p) //打印的是p所指向的内存地址
    fmt.Println(*p) //取出p指针指向地址的值,也就是a的值

}

递增递减语句
在go当中,++与–是作为语句而并非作为表达式

package main

import (
    "fmt"
)

func main() {
    a := 1
    //a := a++ //表达式是可以直接放在等号右边的,而此时是不行的
    a++ //只能这样使用
    var p *int = &a
    fmt.Println(p)
    fmt.Println(*p)

}

判断语句if
条件表达式没有括号
支持一个初始化表达式(可以是并行方式)
左大括号必须和条件语句或else在同一行
支持单行模式
初始化语句中的变量为block级别,同时隐藏外部同名变量

package main

import (
    "fmt"
)

func main() {
    a := 10
    if a := 1; a > 0 { //初始化语句中定义的变量它的作用域只在这个初始化语句块,超出这个语句块,这个变量就会变成没有定义的
        fmt.Println(a) //此时外部的a会被隐藏,输出内部语句a,也就是1
    }
    fmt.Println(a) //if语句执行完毕以后,会打印出外部的a,也集是10
}

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

//第一种形式,类似于while True的应用
package main

import (
    "fmt"
)

func main() {
    a := 1
    for {
        a++
        if a > 3 {
            break
        }
        fmt.Println(a)
    }
    fmt.Println("over!")
}
//第二种形式,自己本身带条件的语句,也属于变异的while语句
package main

import (
    "fmt"
)

func main() {
    a := 1
    for a <= 3 {
        a++
        fmt.Println(a)
    }
    fmt.Println("over!")
}
//第三种形式,for循环常用形式
package main

import (
    "fmt"
)

func main() {
    a := 1
    for i := 0; i < 3; i++ {
        a++
        fmt.Println(a)
    }
    fmt.Println("over")

}

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

//第一种形式
package main

import (
    "fmt"
)

func main() {
    a := 1
    switch a { //检查的变量条件是a本身
    case 0:
        fmt.Println("a=0")
    case 1:
        fmt.Println("a=1")
    default:
        fmt.Println("None")
    }

}
//第二种形式
package main

import (
    "fmt"
)

func main() {
    a := 1
    switch { //如果没有在switch后面跟条件表达式,就必须在case后面跟条件表达式
    case a >= 0:
        fmt.Println("a>=0")
        fallthrough //如果需要继续检查下一个case,就需要用到fallthrough
    case a >= 1:
        fmt.Println("a>=1")
    default:
        fmt.Println("None")
    }

}
//第三种形式
package main

import (
    "fmt"
)

func main() {

    switch a := 1; { //如果没有在switch后面跟条件表达式,就必须在case后面跟条件表达式
    case a >= 0:
        fmt.Println("a>=0")
        fallthrough //如果需要继续检查下一个case,就需要用到fallthrough
    case a >= 1:
        fmt.Println("a>=1")
    default:
        fmt.Println("None")
    }
    fmt.Println(a)//此时无法找到a
}

//不管是if、for、switch语句当中,进行初始化的变量,都是一个局部变量,作用域范围只在当前语句块
跳转语句goto,break,continue
三个语法都可以配合标签使用
标签名区分大小写,如果不使用也会造成编译错误
break和continue配合标签可用于多层循环的跳出
goto是调整执行位置,与其它两个语句配合标签的结果并不相同

package main

import (
    "fmt"
)

func main() {
LABEL1:
    for {
        for i := 0; i < 10; i++ {
            fmt.Println(i)
            if i > 3 {
                fmt.Println(i)
                break LABEL1 //这里使用标签的话,就可以一次性跳出循环
            }
        }
    }
    fmt.Println("OK")
}
package main

import (
    "fmt"
)

func main() {

    for {
        for i := 0; i < 10; i++ {
            fmt.Println(i)
            if i > 3 {
                fmt.Println(i)
                goto LABEL1 //这里如果使用goto语句的话,建议标签放在goto语句之后,如果放在goto语句之前的话,会造成死循环
            }
        }
    }
LABEL1:
    fmt.Println("OK")
}
package main

import (
    "fmt"
)

func main() {
LABEL1:
    for i := 0; i < 10; i++ {
        fmt.Println(i)
        if i > 3 {
            fmt.Println(i)
            continue LABEL1//跳过这次循环,continue下面的语句不会被执行
        }
    }

    fmt.Println("OK")
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值