当前位置: 首页 > article >正文

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

  • 结束当前函数(方法)


http://www.kler.cn/news/361645.html

相关文章:

  • Ping命令的详细请求过程
  • Java 语法糖详解(2)
  • linux命令之lvdisplay用法
  • 【网络原理】HTTP协议
  • YOLOv11改进策略【Conv和Transformer】| ACmix 卷积和自注意力的结合,充分发挥两者优势
  • MySQL新手向:对比常用存储引擎
  • stm32f103zet6 ili9341(fsmc) freertos 制作数字电子时钟
  • vue3 + ts + element-plus 二次封装 el-dialog
  • PostgreSQL的前世今生
  • python实现机器狗的行动控制
  • 【云原生】Kubernetes部署Jenkins静动Slave
  • 原型模式和建造模式的区别
  • STL源码剖析:适配器
  • 如何生成测试覆盖率的报告
  • 计算机毕业设计 基于Python的智能停车系统的设计与实现 Python毕业设计 Python毕业设计选题【附源码+安装调试】
  • 【树莓派】树莓派搭建个人服务器
  • Java框架精品项目【用于个人学习】
  • 探索 Python Web 开发:从框架到爬虫
  • QLORA:高效微调量化大型语言模型
  • export 与 export default 对应import的写法
  • (二十)Java之多线程
  • Matlab 火焰识别技术
  • 基于SpringBoot 4S店车辆管理系统【附源码】
  • 【C++】stack 和 queue
  • Java网络编程-简单的API调用
  • docker-compose-lnmp-wordpress