写点什么

Golang 基础笔记六之流程控制

作者:Hunter熊
  • 2025-06-27
    北京
  • 本文字数:1681 字

    阅读完需:约 6 分钟

Golang基础笔记六之流程控制

本文首发于公众号:Hunter 后端

原文链接:Golang基础笔记六之流程控制


本篇笔记介绍 Golang 里流程控制相关的一些语法,以下是本篇笔记目录:


  1. 条件语句

  2. 循环语句

1、条件语句

1. if-else 语句

if-else 语句的基本语法如下:


if condition {}else if condition {}else {}
复制代码


下面是一个示例:


num := 10if num <= 5 {    fmt.Println("num 小于等于 5")} else if num > 5 && num <= 10 {    fmt.Println("num 大于 5 小于等于 10")} else {    fmt.Println("num 大于 10")}
复制代码


if 语句中,还可以包含一个初始化语句,用于条件判断之前执行一些操作:


if num := 10; num <= 5 {    fmt.Println("num 小于等于 5")} else if num > 5 && num <= 10 {    fmt.Println("num 大于 5 小于等于 10")} else {    fmt.Println("num 大于 10")}
复制代码


注意:这里 num 这个变量的作用域仅限于 if-else 块。


这里的 if-else 语句,除了最开始的 if 语句是必需的外,后面的 else-if 和 else 模块都是可选的。

2. switch 语句

switch 语句有两种形式,一种是表达式 switch,一种是类型 switch。

1. 表达式 switch

下面这个示例是基于表达式的值来执行不同的模块:


day := 4switch day {case 1, 2, 3, 4, 5:    fmt.Println("工作日")case 6:    fmt.Println("星期六")case 7:    fmt.Println("星期日")default:    fmt.Println("非法星期数")}
复制代码


下面这个示例是无表达式的,其效果等同于 if-else 语句:


score := 80switch {case score >= 90:    fmt.Println("优秀")case score >= 80:    fmt.Println("良好")case score >= 70:    fmt.Println("一般")default:    fmt.Println("差劲")}
复制代码
2. 类型 switch

类型 switch 用于根据变量的类型来执行不同的代码块,通常用于处理接口类型的变量,接口相关的内容后面再介绍,这里先直接使用,使用方式和前面的 switch 类似:


func printType(i interface{}) {    switch v := i.(type) {    case int:        fmt.Printf("%v 是整数类型\n", v)    case string:        fmt.Printf("%v 是字符串类型\n", v)    default:        fmt.Printf("%v 是其他类型\n", v)    }}
func main() { num := 10 str := "hello" printType(num) printType(str)}
复制代码

2、循环语句

循环语句就是 for 循环操作了,这里介绍几种类型:

1. for 循环

for 循环的用法和其他语言的类似,比如从 0 循环到 4:


for i := 0; i < 5; i++ {    fmt.Printf("i:%v\n", i)}
复制代码

2. for-range 循环

for-range 循环可用于数组、切片、字符串、map 等可迭代对象,循环的参数又两个,分别是索引和对应的元素。


这里逐个介绍其示例:

1) 数组/切片

数组或者切片的示例如下:


s := []string{"a", "b", "c"}for index, value := range s {    fmt.Printf("index: %v, value: %v\n", index, value)}
复制代码


前面的 index 是索引下标,value 是下标对应的值。


如果不需要 index 或者 value,直接置为 "_" 即可:


s := []string{"a", "b", "c"}for _, value := range s {    fmt.Printf("value: %v\n", value)}
复制代码
2) 字符串

对字符串是用 for-range 返回的索引是字节索引:


s := "hello world"for index, char := range s {    fmt.Printf("index:%d, char:%c\n", index, char)}
复制代码


而如果字符串中包含中文,Go 能够将其自动解码,且返回中文字符开始的字节索引位置:


s2 := "hello 世界"for index, char := range s2 {    fmt.Printf("index:%d, char:%c\n", index, char)}
复制代码
3) map

对 map 使用 for-range 操作会迭代其 key-value:


m := map[string]int{    "a": 1,    "b": 4,    "c": 2,}
for k, v := range m { fmt.Printf("k:%s, v:%d\n", k, v)}
复制代码

3. 无限循环

对于前面的 for 循环,如果我们不设置任何条件,就可以实现一个无限循环,可以在内部通过 continue 和 break 来控制进入下一次循环或者退出循环。


以下是一个示例:


i := 0for {    i++    if i%2 == 0 {        fmt.Println("i 是偶数", i)        continue    }
if i == 5 { fmt.Println("i = 5, 退出循环") break }}
复制代码


发布于: 刚刚阅读数: 2
用户头像

Hunter熊

关注

公众号:Hunter后端 2018-09-17 加入

Python后端工程师,欢迎互相沟通交流

评论

发布
暂无评论
Golang基础笔记六之流程控制_Go_Hunter熊_InfoQ写作社区