GO之流程控制

一、流程控制简述

一)流程控制的作用

流程控制语句是用来控制程序中语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑块

二)流程控制的分类

控制语句分为三类:顺序、选择和循环

  • 顺序结构:依次执行:先执行a,再执行b的逻辑
  • 条件判断结构:若...,则...的逻辑
  • 循环结构:若...,则继续...的逻辑

这三种基本逻辑是相互支撑的,他们构成了算法基本机构,无论怎样复杂的逻辑结构,都可以通过他们来表达。所以任何一种高级语言都要局部上述两种结构。

三)流程控制的流程

二、详解流程控制语句

一)分支结构

1、if分支
  • 表达式左右的 () 是建议省略的
  • if 后面可以并列加入变量的定义的 使用分号 隔开 : if count := 10; count < 30 { }

单分支

复制代码
if 条件表达式 {
  逻辑代码
}

双分支

复制代码
if 条件表达式 {
  逻辑代码
} 
else {
  逻辑代码
}

多分支

复制代码
if 条件表达式1 {
  逻辑代码1
} else if 条件表达式2 {
  逻辑代码2
}
......

else {
  逻辑代码n
}
2、switch分支

基本语法

复制代码
switch 表达式 {
  case 值1, 值2, .....:
    语块1  
  case 值3, 值4, .....:
    语块2
  ......
  default:
    语句n
}

注意事项

  • switch后是一个表达式(即:常量值、变量、一个有返回值的函数等都可以)
  • case后的各个值的数据类型,必须和switch的表达式数据类型一致
  • case后可以带多个表达式,使用逗号间隔。例: case 表达式1, 表达式2, ....
  • case后的表达式若是常量值(字面值),则要求不能重复
  • case 后面不需要带break,程序匹配case后就会执行对应的代码块,然后退出switch,若一个都匹配不到,则执行default
  • default分支不是必须的
  • default分支可以放在任何位置,不一定非放到最后
  • switch后也可以不带表达式,当做if分支来使用

  • switch后也可以直接声明和定义一个变量,分号结束(不推荐)

  • switch穿透,利用fallthrough 关键字,若在case语句块后增加fallthrough,则会继续执行下一个case,也叫switch穿透

二)循环结构

1、for循环
1)一般语法结构
复制代码
for (初始化表达式; 布尔表达式; 迭代因子) {
  循环体;
}
  • 初始化部分设置循环变量的初值
  • 条件判断部分为任意布尔表达式
  • 迭代因子控制循环变量的增减
  • for的出事表达式,不能用var定义变量的形式,要用 :=
复制代码
package main

import "fmt"

func main() {
    var sum int = 0
    /*
        for 初始表达式; 布尔表达式; 迭代因子 {
            循环体
        }
    */
    for i := 0; i < 100; i++ {
        sum += i
    }

    fmt.Println("100之内整数求和sum:", sum)
}
2)for range

for range 结构时Golang语言特有的一种迭代结果,在许多情况下都非常有用,for range 可以遍历数组、切片、字符串、map及通道。

for range语法上类似于其他语言中的 for each 语句,一般形式为

复制代码
for key, val := range coll {
  ...
} 

范例

复制代码
    // 定义一个字符串
    var str string = "hello world! 你好,世界!"
    // 方式一:使用普通for循环:按照字符串的索引进行循环 
    //for i := 0; i < len(str); i++ {
    //    fmt.Printf("%c \n", str[i])
    //}
    //
    // 方式二: 使用 for range
    for i , value := range str {
        fmt.Printf("索引为: %d, 具体的值为:%c \n", i, value)
    }

**  执行结果如下**

复制代码
索引为: 0, 具体的值为:h
索引为: 1, 具体的值为:e
索引为: 2, 具体的值为:l
索引为: 3, 具体的值为:l
索引为: 4, 具体的值为:o
索引为: 5, 具体的值为:
索引为: 6, 具体的值为:w
索引为: 7, 具体的值为:o
索引为: 8, 具体的值为:r
索引为: 9, 具体的值为:l
索引为: 10, 具体的值为:d
索引为: 11, 具体的值为:!
索引为: 14, 具体的值为:
索引为: 15, 具体的值为:你
索引为: 18, 具体的值为:好
索引为: 21, 具体的值为:,
索引为: 24, 具体的值为:世
索引为: 27, 具体的值为:界
索引为: 30, 具体的值为:!

**  总结:**

  • 普通for循环,无法将中文正常输出
  • for range,会将中文正常输出
2、关键字

break

  • switch语句中,每个case分支后都用break结束当前分支,但是在go中break可以省略(不写)
  • break可以结束正在执行的循环:结束离它最近的循环
  • 标签的使用:若定义的标签没有使用到的话,那么标签不用加,否则标错(标签定义未使用)

continue

  • 结束本地循环,继续下一次循环

goto

  • 作用:可以无条件地转移到程序的指定的行
  • 使用场景:通常与条件语句配合使用,可用来实现条件转移
  • 在go程序设计时,一般不建议使用goto语句,以免造成程序流程的混乱

return

  • 结束当前函数(方法)
相关推荐
小魏冬琅8 分钟前
探索面向对象的高级特性与设计模式(2/5)
java·开发语言
lihao lihao11 分钟前
C++stack和queue的模拟实现
开发语言·c++
TT哇22 分钟前
【Java】数组的定义与使用
java·开发语言·笔记
走,我们去吹风26 分钟前
redis实现分布式锁,go实现完整code
redis·分布式·golang
天天进步201527 分钟前
Lodash:现代 JavaScript 开发的瑞士军刀
开发语言·javascript·ecmascript
假装我不帅36 分钟前
js实现类似与jquery的find方法
开发语言·javascript·jquery
look_outs40 分钟前
JavaSE笔记2】面向对象
java·开发语言
萧鼎40 分钟前
【Python】高效数据处理:使用Dask处理大规模数据
开发语言·python
大熊程序猿1 小时前
ubuntu 安装k3s
linux·运维·ubuntu
luoqice1 小时前
CentOS 自启动某个应用
linux·运维·服务器