【go入门】流程控制语句

server/2024/10/11 6:33:57/

目录

  • 前言
  • if else
    • 基本写法
    • 特殊写法
  • for(循环结构)
    • for 基本写法
    • 不写初始语句,但分号必须要加
    • 不写初始语句和结束语句
    • 无限循环(死循环)
    • break和continue
  • for range(键值循环)
  • switch和case
  • goto(跳转到指定标签)

前言

go语言常用的流程控制有ifforswitchgoto是为了简化代码,降低重复代码而生的结构,是扩展类的流程控制。

if else

基本写法

//demo1
package main//if 语句基本写法
import "fmt"func main() {var score = 80if score > 90 {fmt.Println("优秀")} else if score > 75 {fmt.Println("良好")} else if score > 60 {fmt.Println("合格")} else {fmt.Println("继续加油!")}fmt.Println(score)
}

特殊写法

//demo2
package mainimport "fmt"
//if 特殊写法
func main() {if score := 80; score > 90 { //初始化写在条件语句内fmt.Println("优秀")} else if score > 75 {fmt.Println("良好")} else if score > 60 {fmt.Println("合格")} else {fmt.Println("继续加油!")}//fmt.Println(score) //在外面打印会报错
}

for(循环结构)

go语言中的所有循环类型均用for关键字来完成。

for 基本写法

//demo3
func main() {for i := 0; i < 10; i++ {fmt.Println(i)}
}

不写初始语句,但分号必须要加

//demo4
func main() {i := 0for ; i < 10; i++ {fmt.Println(i)}
}

不写初始语句和结束语句

这种写法相当于某些编程语言中的 while 语句。

//demo5
func main() {i := 0for i < 10 {fmt.Println(i)i++}
}

无限循环(死循环)

//demo6
func main() {for {fmt.Println("hello world")}
}

break和continue

循环可以通过breakcontinue跳出循环

  • break是直接跳出循环
//demo7
func main() {for i := 0; i < 10; i++ {if i == 5 {break}fmt.Println(i)}
}
  • continue是跳过本次循环,进入到下一次循环
//demo8
func main() {for i := 0; i < 10; i++ {if i == 5 {continue}fmt.Println(i)}
}
  • break语句可以结束forswitchselect的代码块。break语句还可以在语句后面添加标签,表示退出某个标签对应的代码块,标签要求必须定义在对应的forswitchselect的代码块上。
//demo9
func main() {
BREAKDEMO:for i := 0; i < 10; i++ {if i == 3 {break BREAKDEMO}fmt.Println(i)}fmt.Println("hhh")
}
  • continue语句可以结束当前循环,开始下一次的循环迭代过程,仅限在for循环内使用。在continue语句后添加标签时,表示开始标签对应的循环。
//demo10
func main() {
FORLOOP:for i := 0; i < 10; i++ {if i == 3 {continue FORLOOP}fmt.Println(i)}fmt.Println("hhh")
}

for range(键值循环)

Go语言中可以使用for range遍历数组、切片、字符串、map 及通道(channel)。 通过for range遍历的返回值有以下规律:

  • 数组、切片、字符串返回索引和值。
  • map 返回键和值。
  • 通道(channel)只返回通道内的值。
//demo11
func main() {for i := range 5 {fmt.Println(i)}
}

switch和case

  • switch可以简化多个if...else代码。比如和星期有关系,一星期有七天。
    如果用if...else来写:
//demo12
func main() {day := 5if day == 1 {fmt.Println("Monday")} else if day == 2 {fmt.Println("Tuesday")} else if day == 3 {fmt.Println("Wednesday")} else if day == 4 {fmt.Println("Thursday")} else if day == 5 {fmt.Println("Friday")} else if day == 6 {fmt.Println("Saturday")} else if day == 7 {fmt.Println("Sunday")}
}

如果用switch来写:

//demo13
func main() {day := 5switch day {case 1:fmt.Println("Monday")case 2:fmt.Println("Tuesday")case 3:fmt.Println("Wednesday")case 4:fmt.Println("Thursday")case 5:fmt.Println("Friday")case 6:fmt.Println("Saturday")case 7:fmt.Println("Sunday")default:fmt.Println("Day")}
}
  • case还可以一次判断多个值。比如我判断是奇数还是偶数:
//demo14
func main() {num := 5switch num {case 1, 3, 5, 7:fmt.Println("奇数")case 2, 4, 6, 8:fmt.Println("偶数")default:fmt.Println("啥也不是")}
}

一个switch语句可以有多个case,但是只能由一个default

  • case中使用表达式
//demo15
func main() {age := 50switch { //switch后面不跟变量case age > 60:fmt.Println("老年人")case age < 60:fmt.Println("劳动者")default:fmt.Println("不是人")}
}

goto(跳转到指定标签)

//demo16
func main() {for i := 0; i < 10; i++ {if i == 5 {goto flag}fmt.Println(i)}returnflag:fmt.Println("结束循环")
}

http://www.ppmy.cn/server/130003.html

相关文章

Airtest脚本的重构与优化:提升测试效率和可读性

在自动化测试的工作里&#xff0c;编写高效且易于维护的测试脚本是一项挑战&#xff0c;尤其是在应对复杂的测试场景时。Airtest作为一款常用的自动化测试工具&#xff0c;它提供了丰富的API和灵活的脚本编写方式&#xff0c;帮助测试人员高效地开展UI自动化测试。然而&#xf…

走进异常类的世界,自定义业务异常类实现指南

接下来这篇文章&#xff0c;小编将带领大家走进异常类的世界&#xff0c;探索异常类的奥秘。 引言 学习Java异常类&#xff0c;需掌握其基础概念&#xff0c;如try-catch语句、throw与throws关键字。通过实例理解异常层次结构&#xff0c;区分已检查与未检查异常。实践编写自定…

Redis中大key优化落地实战

背景 最近Redis服务器总是报警&#xff0c;这块对Redis中的数据做了一次治理&#xff0c;分享一下治理的思路。 思路 首先需要看一下Redis库的比较大的KV是啥&#xff0c;发现大部分都是缓存的JSON。如下面所示 {"id": 1,"name": "张三",&qu…

GRU--详解

GRU&#xff08;Gated Recurrent Unit&#xff09;&#xff08;门控循环单元&#xff09;是RNN&#xff08;循环神经网络&#xff09;的一种变体。GRU的设计简化了另一种RNN变体——LSTM&#xff08;长短期记忆网络&#xff09;&#xff0c;与LSTM不同的是&#xff0c;GRU将输入…

鸿蒙开发(NEXT/API 12)【HTTP数据请求】网络篇

场景介绍 应用通过HTTP发起一个数据请求&#xff0c;支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 接口说明 HTTP数据请求功能主要由http模块提供。 使用该功能需要申请ohos.permission.INTERNET权限。 接口名描述createHttp()创建一个http请求…

如何进行数据中心负载测试的自动化?

数据中心负载测试的自动化是一种通过使用软件工具和脚本来模拟大量用户访问数据中心的过程&#xff0c;以评估其性能、稳定性和可扩展性的方法。以下是进行数据中心负载测试自动化的一些建议&#xff1a; 市场上有许多负载测试工具可供选择&#xff0c;如LoadRunner、JMeter、…

充电宝租赁管理系统网站毕业设计SpringBootSSM框架开发

目录 1. 概述 2. 技术选择与介绍 3. 系统设计 4. 功能实现 5. 需求分析 1. 概述 充电宝租赁管理系统网站是一个既实用又具有挑战性的项目。 随着移动设备的普及和人们日常生活对电力的持续依赖&#xff0c;充电宝租赁服务已成为现代都市生活中的一项重要便利设施。它不仅为…

MindSearch 部署到Github Codespace 和 Hugging Face Space

conda init后需要重开终端&#xff0c;不然一键复制会导致后续pip install会安装错环境 还是报错 ImportError: cannot import name AutoRegister from class_registry (/opt/conda/envs/mindsearch/lib/python3.10/site-packages/class_registry/__init__.py)pip install --…