当前位置: 首页 > 图灵资讯 > 技术篇> go 判断语句

go 判断语句

来源:图灵教育
时间:2023-06-02 09:30:42

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

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

递增减语句 在go中,++和–它被用作句子,而不是表达式

package mainimport (    "fmt")func main() {    a := 1    //a := a++ //表达式可直接放在等号右侧,而且这个时候是不行的    a++ ///只能这样使用    var p *int = &a    fmt.Println(p)    fmt.Println(*p)}

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

package mainimport (    "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一个循环语句关键词,但支持三种形式 初始化和步进表达可以是多个值 每个循环都会重新检查条件句,所以不建议在条件句中使用函数,尽量提前计算条件,用变量或常量代替 左大括号必须与句子在同一行

//第一种形式,类似while packagetrue的应用 mainimport (    "fmt")func main() {    a := 1    for {        a++        if a > 3 {            break        }        fmt.Println(a)    }    fmt.Println("over!")}//第二种形式,自己有条件的句子,while语句package也属于变异 mainimport (    "fmt")func main() {    a := 1    for a <= 3 {        a++        fmt.Println(a)    }    fmt.Println("over!()}//第三种形式,packagegefor循环常用形式 mainimport (    "fmt")func main() {    a := 1    for i := 0; i < 3; i++ {        a++        fmt.Println(a)    }    fmt.Println("over")}

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

///以第一种形式package mainimport (    "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 mainimport (    "fmt")func main() {    a := 1    switch { //如果switch后面没有条件表达式,case背后必须有条件表达式    case a >= 0:        fmt.Println("a>=0")        fallthrough //如果需要继续检查下一个case,需要使用falthrough    case a >= 1:        fmt.Println("a>=1")    default:        fmt.Println("None")    }}//以第三种形式package mainimport (    "fmt")func main() {    switch a := 1; { //如果switch后面没有条件表达式,case背后必须有条件表达式    case a >= 0:        fmt.Println("a>=0")        fallthrough //如果需要继续检查下一个case,需要使用falthrough    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 mainimport (    "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 mainimport (    "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 mainimport (    "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")}