网站首页 > 文章精选 正文
控制流结构用于改变程序的执行顺序,使得程序可以根据条件执行不同的代码路径。
1. 条件语句
- if 语句:
- 用于基于条件执行代码块。
- 示例:
if condition {
// 代码块
}
- if-else 语句:
- 用于在条件为真时执行一个代码块,在条件为假时执行另一个代码块。
- 示例:
if condition {
// 代码块 1
} else {
// 代码块 2
}
- if-else-if 语句:
- 用于测试多个条件。
- 示例:
if condition1 {
// 代码块 1
} else if condition2 {
// 代码块 2
} else {
// 代码块 3
}
- switch 语句:
- 用于基于不同的条件执行不同的代码块。
- 示例:
switch expression {
case value1:
// 代码块 1
case value2:
// 代码块 2
default:
// 默认代码块
}
- switch 语句的类型断言:
- 用于基于类型执行不同的代码块。
- 示例:
switch value := expression.(type) {
case int:
// 当 expression 是 int 类型时
case string:
// 当 expression 是 string 类型时
default:
// 默认代码块
}
2. 循环语句
- for 语句:
- 用于重复执行一段代码直到满足某个条件。
- 示例:
for initialization; condition; post {
// 代码块
}
- 无限循环:
- 用于创建一个永远不会停止的循环。
- 示例:
for {
// 代码块
}
- break 语句:
- 用于立即退出循环。
- 示例:
for {
if condition {
break
}
// 代码块
}
- continue 语句:
- 用于跳过当前循环的剩余部分并继续下一次迭代。
- 示例:
for {
if condition {
continue
}
// 代码块
}
- range 运算符:
- 用于遍历数组、切片、字符串、映射或通道。
- 示例:
for key, value := range map {
// 代码块
}
3. 通道通信与 select 语句
- 用于从多个通道中选择一个可用的通道来执行通信。
- 示例:
select {
case <-ch1:
// 从 ch1 接收值
case ch2 <- value:
// 向 ch2 发送值
default:
// 没有通道准备好时执行
}
- 非阻塞通信:
- select 语句可以实现非阻塞的通道通信。
- 如果没有通道准备好,default 子句将被执行。
- 并发控制:
- select 语句可以用于实现并发程序中的复杂控制逻辑。
4. 牛刀小试,动手写一写:
// https://go.dev/play/p/OOESVkz4NBq
package main
import "fmt"
func main() {
// if 语句
var age int = 30
if age >= 18 {
fmt.Println("You are an adult.")
}
// if-else 语句
if age >= 60 {
fmt.Println("You are a senior citizen.")
} else {
fmt.Println("You are not a senior citizen.")
}
// switch 语句
var dayOfWeek int = 3
switch dayOfWeek {
case 1:
fmt.Println("Monday")
case 2:
fmt.Println("Tuesday")
case 3:
fmt.Println("Wednesday")
default:
fmt.Println("Other day")
}
// switch 语句的类型断言
var value interface{} = 10
switch v := value.(type) {
case int:
fmt.Println("The value is an integer:", v)
case string:
fmt.Println("The value is a string:", v)
default:
fmt.Println("Unknown type")
}
// for 语句
for i := 0; i < 5; i++ {
fmt.Println("Iteration", i)
}
// 无限循环
var counter int = 0
for {
if counter >= 10 {
break
}
fmt.Println("Counter:", counter)
counter++
}
// range 运算符
var numbers = []int{1, 2, 3, 4, 5}
for index, value := range numbers {
fmt.Printf("Index: %d, Value: %d\n", index, value)
}
}
猜你喜欢
- 2025-07-14 Go并发编程之WaitGroup(go语言 并发)
- 2025-07-14 golang企业微信告警(企业微信告警推送)
- 2025-07-14 2.8 Go语言中的for循环,break和continue
- 2025-07-14 Go语言Context包:最常用包之一的使用指南
- 2025-07-14 Go语言零到一:动态数组——切片(go语言的切片)
- 2025-07-14 2025-06-26:转换数组。用go语言,给你一个整数数组 nums,它被视
- 2025-07-14 go sync.Pool简介(go system)
- 2025-07-14 2025-07-13:统计特殊子序列的数目。用go语言,给定一个只包含正
- 2025-07-14 Go语言数据库编程:GORM 的基本使用
- 2025-07-14 2025-06-28:长度可被 K 整除的子数组的最大元素和。用go语言,给
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)
- fmt.println (52)