【go语言实践】基础篇 - 流程控制

if语句

go里面if不需要括号将条件表达式包含起来,这与python也有点类似
if 条件表达式 {

}

if num > 18 {
    // ...
} else if num > 20 {
    // ...
} else {
    // ...
}

需要注意的是go支持在if的条件表达式中直接定义一个变量,变量的作用域只在if范围内,如:

if num := 20; num > 5 {
    // ...
}

这让我们一些场景可以便捷地存储中间变量

switch语句

go语言的switch分支不需要有break语句,这是与c不同的地方。基本语法如下:
switch expression {
case expression1,expression2,…:
// …
case expression3, expression4,…:
// …
// …
default:
// …
}
golang中是允许多个表达式匹配的,比如expression1或expression2,就会执行第一个case。default语句不是必须的,但为了程序稳定通常需要有默认操作。

switch num {
case 1, 2, 3:
    fmt.Println("num", num)
case 4, 5, 6:
    num++
default:
    fmt.Println("not in range")
}

另外,switch后面也可以不带表达式,这时等价于if -else

switch {
case num == 1:
    // ...
case num == 2:
    // ...
default:
    // ...
}

switch后面也可以定义一个变量,分号结束,通常不这样写:

switch num := 90; {
case num > 90:
    // ...
default:
    // ...
}

switch fallthrough

在一个case语句中使用fallthrough,则会继续执行下一个case分支,注意这里下一个分支不用判断,直接执行。但通常不用,条件语句已经足够覆盖所有场景

switch num {
case 10:
    // ...
    fallthrough
case 20:
    // ...
default:
    // ...
}

type-switch(不懂的后面的文章会讲到)

switch语句还可以用来判断某个interface变量中实际指向的变量类型

var x interface
var y = 10.0
x = y
switch i : x.(type) {
    case nil:
        // ...
    case int:
        // ...
    case float64:
        // ...
    case func(int) float64:
        fmt.Printf("x 是 func(int)型")
    case bool, string:
        //
    default:
       // ...
}

for循环语句

go语言的for循环也是不需要用()把表达式给包起来,如:

for num := 0; num <= 10; num++ {
    // ...
}

此外,for循环可以有以下两种写法

for num < 99 {
    // 只写循环条件的写法
}

for {
    // 什么条件都不写,相当于无限循环,在内部决定循环终止条件
}

// 上面的for等价于
for ; ; {
}

for range遍历字符串

另外,go语言也支持fo range的遍历方式,便于遍历字符串和数组,如:

str1 := "hello, zhangping"
for index, val := range str1 {
    fmt.Printf("index:%d val=%c\n", index, val)
}

for range遍历字符串时,是按照字符来遍历的,而不是按照字节来遍历的。与我们常规字节遍历的区别在于,像遍历中文字符串,for range会打印一整个中文字符,但常规字节遍历会打印单个字节(一个中文两个字节),通常会乱码
传统的方法想要打印中文,需要转换成rune的切片:

str1 := "hello, 张平"
str2 := []rune(str1)
for i := 0; i < len(str2); i++ {
    fmt.Printf("%c\n", str2[i])
    // break
    // coontinue
}

go里面没有while和do while语句,要跳出循环也是break,跳过本次循环continue,另外go语言也支持goto语句跳到任意语句处,但最好不要用。

你可能感兴趣的:(go/golang基础及实践,golang)