控制语句与数组-GOLANG

golang  - @amazeUI  - 2017-08-01 15:57:12

基本控制语句有if,for,switch。if系列语句和php的一些区别,if条件判断语句不能写小括号,并且在条件判断前可以有初始化操作语句,只能有一个初始化语句,if下的执行语句由花括号包起来,左花括号必须与if同行。如下

    if a, b := 3, 4; a == 3 {

        fmt.Println(a)

        fmt.Println(b)

    }

上面代码块变量a和b只在当前if执行语句内有效,如果在if块外也有a和b两个变量则外部同名变量在if代码块内被隐藏,要申明多个变量只能放在同一个语句里面,不能以a:=3;a:=4;这种不行。

循环语句在go里面只有for循环,for循环有三种表现方式,for{}这一种是无限循环,for a>3{}这一种可以加一个条件判断,不要去尝试执行语句内不写步长。还有一种for循环跟php一样,for a:=1;a<3;a++{}。

三个跳转语句,break,continue,goto

Lable:

    for {

        for a := 1; a < 10; a++ {

            if a == 5 {

                break Lable

            } else {

                fmt.Println(a)

            }

        }

    }

Lable为外层for的标签,这个for是一个无限循环的for,到了第二层如果a如果等于5了,则会结束到Lable对应的for。如果把这个break改为continue的话,这就是无限循环了,continue只是结束这一层循环继续下一层循环,改成goto的话会重新开始这个for循环,当然也是一个死循环了。

switch判断不需要手动break,符合case条件后会执行完语句就停止。如果需要继续往下走需要手动加上fallthrough语句。switch也可以写一个初始化语句。

    switch a := 2; {

    case a == 2:

        fmt.Println(2)

    }

func main() {

    x, y := 1, 2

    a := [2]*int{&x, &y} //保存的是指针,&取址

    c := [...]int{1: 0}  //...可以代替未知单元个数,会自动算出个数

    var d *[2]int = &c   //保存的是数组实际的值,指向数组的指针,用关键字new出来的也是指向数组的指针

    var b = new([2]int)

    fmt.Println(a)

    fmt.Println(*a[1]) //*号取值

    fmt.Println(b)

    fmt.Println(d)

    var s [2][3][3]int

    fmt.Println(s)

}

//数组

//1.声明 var a [单元个数]类型,声明并赋值 a:=[单元格数]类型{索引:值},使用var就只能声明不能赋值,使用:=方式就必须得赋值,哪怕是放个空的花括号。

//2.数组可以进行等于或不等于的比较,数组的长度是作为一种类型存在的,不同类型的数组不能进行比较

//3.使用new声明的数组保存的是指向数组的本身,c := [...]int{1: 1},var d *[2]int = &c,d保存的也是指向数组的本身,

//4.c保存的则是数组本身,打印出来c和d可以看到d前面有个&符号。

//5.多维数组申明,可以这么理解s里面有两个一维数组,每个一维数组里面有三个数组,属于二维数组,最后一个代表多少个键值对

你可能感兴趣的:(控制语句与数组-GOLANG)