【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语句跳到任意语句处,但最好不要用。

相关推荐

  1. go语言实践基础 - 流程控制

    2023-12-12 11:30:12       35 阅读
  2. go语言实践一】go语言基础

    2023-12-12 11:30:12       31 阅读
  3. Go语言流程控制(一)

    2023-12-12 11:30:12       9 阅读
  4. Go语言流程控制(二)

    2023-12-12 11:30:12       11 阅读
  5. Go 快速入门】基础语法 | 流程控制 | 字符串

    2023-12-12 11:30:12       36 阅读
  6. Go语言入门:Go程序的流程控制语句

    2023-12-12 11:30:12       35 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-12 11:30:12       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-12 11:30:12       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-12 11:30:12       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-12 11:30:12       18 阅读

热门阅读

  1. ACwing算法备战蓝桥杯——Day30——树状数组

    2023-12-12 11:30:12       35 阅读
  2. 使用GDCM库将.gz文件转换为.dcm文件的测试程序

    2023-12-12 11:30:12       38 阅读
  3. 打破空间限制,畅享真实生活

    2023-12-12 11:30:12       38 阅读
  4. 面向对象设计与分析40讲(22)罪恶的单例模式?

    2023-12-12 11:30:12       38 阅读
  5. 进程崩溃后,共享内存中的锁不释放

    2023-12-12 11:30:12       44 阅读
  6. Leetcode 第375场周赛,个人题解

    2023-12-12 11:30:12       29 阅读
  7. Ubuntu——永久挂载/卸载硬盘

    2023-12-12 11:30:12       43 阅读
  8. [Verilog]用Verilog实现并串装换

    2023-12-12 11:30:12       28 阅读