Go语法学习笔记(二) | 青训营笔记

94 阅读3分钟

这是我参与「第五届青训营」伴学笔记创作活动的第3天。

之前( juejin.cn/post/719872… )的笔记总结了Go语言的变量、函数、循环等基本概念,这一篇笔记将接续前文,总结和整理Go语言的条件分支语句、数组等内容。

条件语句

与许多语言一样,Go语言中条件语句的关键字是if。Go语言中典型的条件语句语法是形如if condition的语句,在Go语言中,if关键字之后的条件并不需要使用括号包裹。如果有多个条件需要处理,则可以使用elseelse if关键字。下面是一个使用if语句的例子:

if 7%2 == 0 {
    fmt.Println("7 is even")
} else {
    fmt.Println("7 is odd")
}

除了上面这种if用法,Go语言还提供了另一种用法,即在if关键字后跟多个语句,语句之间用;分隔,最后一个语句作为条件语句,例如:

if num := 9; num < 0 {
    fmt.Println(num, "is negative")
} else if num < 10 {
    fmt.Println(num, "has 1 digit")
} else {
    fmt.Println(num, "has multiple digits")
}

上面这段代码的第一个if语句就包含两个语句,第一个语句num := 9定义了num变量,第二个语句num < 0则是一个布尔表达式,用于描述条件。需要注意的是,在if语句中定义的变量的作用域仅限在条件语句之内,以上面的代码为例,num变量并不能在这一系列条件语句块之外使用。

switch语句

在需要多个条件时,相比于多个else if,开发者通常更倾向于使用switch-case语句。在Go语言中switch语句和C++/Java中的很相似,如下:

a := 2
switch a {
    case 1:
        fmt.Println("one")
    case 2:
	fmt.Println("two")
    case 3:
	fmt.Println("three")
    case 4, 5:
	fmt.Println("four or five")
    default:
	fmt.Println("other")
}

注意,Go语言中的switch语句并不需要在各个case的处理语句中加break手动跳转,Go语言只会执行匹配的case的语句。此外,Go语言支持多个case匹配同一段语句,比如上面的case 4, 5。除了值匹配,Go语言的case还支持条件表达式,例如:

t := time.Now()
switch {
    case t.Hour() < 12:
	fmt.Println("It's before noon")
    default:
	fmt.Println("It's after noon")
}

数组

Go语言的数组和C语言的功能和定义方法很类似,Go的数组是定长的,且不支持使用变量的值作为数组长度,数组长度必须在定义时使用常量或字面量指定,或者在定义时给出数组的元素,由编译器推断数组长度。Go语言的数组可以是一维的,也可以是多维的(数组的数组)。Go语言的数组定义方法是:

var variable_name [SIZE] variable_type

具体的例子如下所示,其中第4行代码就展示了定义时只给出元素而不给出长度的数组定义方法:

var a [5]int
a[4] = 100

b := [...]int{1, 2, 3, 4, 5}

var twoD [2][3]int
for i := 0; i < 2; i++ {
    for j := 0; j < 3; j++ {
	twoD[i][j] = i + j
    }
}