五、Go语言快速入门值条件控制

📅 2024年4月28日

📦 使用版本为1.21.5

条件判断和循环判断

If/switch条件判断

⭐️ 和其他语言一样拥有if else if else和switch语句

1️⃣ if else if else
go 复制代码
func main() {
	score := 90
	var ans string
	if score >= 0 && score < 60 {
		ans = "F"
	} else if score < 70 {
		ans = "D"
	} else if score < 80 {
		ans = "C"
	} else if score < 90 {
		ans = "B"
	} else if score < 100 {
		ans = "A"
	} else if score == 100 {
		ans = "S"
	} else {
		ans = "nil"
	}
	fmt.Println(ans)
}

2️⃣ if语句可以包含一些简单的语句

go 复制代码
func main() {
	if x := 3 + 1; x > 3 {
		fmt.Print(x)
	}
}
3️⃣ Switch

⭐️ 有一个default,当前面条件都不满足就执行

go 复制代码
func main() {
	test := 'a'
	switch test {
	case 'a':
		fmt.Println("a")
	case 'b':
		fmt.Println("b")
	case 'c':
		fmt.Println("c")
	default: //默认情况
		fmt.Println("default")
	}
}

4️⃣ 在switch中也可以写一些简单的语句

go 复制代码
func main() {
	switch test := 'a'; { //等于 switch test :=a; true
	case test == 'a':
		fmt.Println("a")
	case test == 'b':
		fmt.Println("b")
	case test == 'c':
		fmt.Println("c")
	default:
		fmt.Println("default")
	}
}

5️⃣ 也可以什么都不写

go 复制代码
func main() {、
	test := 'a'
	switch  { //等于 switch  true
	case test == 'a':
		fmt.Println("a")
	case test == 'b':
		fmt.Println("b")
	case test == 'c':
		fmt.Println("c")
	default:
		fmt.Println("default")
	}
}

6️⃣ 使用fallthrough关键字,如果当前分支执行完毕,则继续执行相邻的下一个分支,是直接执行语句,而不是还需要判断

go 复制代码
func main() {
	test := 'a'
	switch { //等于 switch test :=a; true
	case test == 'a':
		fmt.Println("a")
		fallthrough
	case test == 'b':
		fmt.Println("b")
	case test == 'c':
		fmt.Println("c")
	default: 
		fmt.Println("default")
	}
}

//输出
a
b

7️⃣ 它还可以包含多个表达式

go 复制代码
package main

import (
    "fmt"
)

func main() {
    letter := "i"
    switch letter {
    case "a", "e", "i", "o", "u": // 一个选项多个表达式
        fmt.Println("vowel")
    default:
        fmt.Println("not a vowel")
    }
}
lable和goto

⭐️ 标签语句,给一个代码块打上标签,可以是goto,break,continue的目标

GO 复制代码
func main() {
	A:
		println('A') //两个代码块,
	B:
		println('B')
}

⭐️ 使用goto将控制权传递给在同一函数中对应标签语句,但是在它使用的很少跳来跳去很麻烦,性能消耗也是一个问题

go 复制代码
func main() {
   a := 1
   if a == 1 {
      goto A
   } else {
      fmt.Println("b")
   }
A:
   fmt.Println("a")
}
For循环

⭐️ 在Go中,仅有一种循环语句:for,Go抛弃了while语句,for语句可以被当作while来使用

1️⃣ 语法

go 复制代码
func main() {
	for i := 0; i < 10; i++ {
		println(i) //输出0-9的数字
	}
}

2️⃣ 它可以同时声明多个变量,但是不能有多个循环后操作

go 复制代码
func main() {
	for j, i := 0, 0; i < 10 || j > 1; i++ {
		println(i, j)
	}
}

3️⃣ 当成while

go 复制代码
func main() {
	for i := 1; i < 100; {
		println(i)
	}
}


//或者
func main() {
	i := 1;
	for i < 100{
		println(i)
	}
}

4️⃣ 其他的break和continue,就不用多说了

📝 实验:九九乘法表

go 复制代码
func main() {
	//九九乘法表
	for i := 1; i <= 9; i++ {
		for j := 1; j <= 9; j++ {
			if i <= j {
				fmt.Printf("%d * %d = %2d  ", i, j, i*j)
			}
		}
		fmt.Println()
	}
}
⭐️ for range

1️⃣ 它有点类似于Python的for循环

go 复制代码
//语法
for index, value := range iterable {
	
}

2️⃣ 代码实列

go 复制代码
func main() {
	str := "Hello World"
	for index, value := range str {
		fmt.Println(index, value) //打印下标和下标的值
	}
}

💡 它对于不同的数据结构,它的实现可能都不同

⚠️注意点:

  • 作用于切片是返回元素的下标和元素值
  • 作用于string,由于string底层使用UniCode编码存储字符,字符肯占用1-4个字节,所以下标可能不连续
  • 作用于map则返回每个元素的key和value
  • 作用于channel,会返回channel中所有元素,如果channel没有元素了for-range则会被阻塞,如果channel本身就是nil,则会直接阻塞
相关推荐
寻林写彡3 分钟前
01| 裸机部署 K8S:从零搭建生产可用集群
云原生·kubernetes
Mr_Macallon7 分钟前
C++回顾(基础)(01)
c语言·开发语言·c++·学习
计算机毕业编程指导师10 分钟前
【大数据毕设选题推荐】基于Spark的WTA职业网球赛事演变与竞技格局分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·python·计算机·spark·毕业设计·课程设计·wta网球
未来之窗软件服务18 分钟前
Go 利器 GoReSym:剥离符号恢复 Go 二进制元数据—东方仙盟
开发语言·golang·仙盟创梦ide·东方仙盟
言乐628 分钟前
Python区分广度优先深度优先宽度优先的区别
python·算法·深度优先·广度优先·宽度优先
打工仔折腾 AI40 分钟前
LLaMA 1 到 LLaMA 3 架构演进拆解:从 RoPE、GQA 到词表扩张
人工智能·后端·python·深度学习·langchain·llama
朝朝辞暮i1 小时前
C++ 第 32 课:main()、rclcpp::init()、spin()、shutdown()
开发语言·c++·算法
可乐鸡翅yeah_1 小时前
HLS 分片过期清理,直播旧 TS 分片磁盘爆满问题处理
java·后端·spring·m3u8·m3u8在线·音视频在线播放
旋生万物1 小时前
螺旋角分布的功率谱分析:多窗谱 + FDR 校正
开发语言·python
sunoo-2291 小时前
【ARM嵌入式学习笔记第十天】i.MX6ULL eLCDIF控制器驱动RGB LCD全解析(硬件原理+寄存器配置+裸机代码)
arm开发·笔记·学习