程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

Go语言零到一:控制流(go语言工作流)

balukai 2025-07-14 14:48:45 文章精选 3 ℃

控制流结构用于改变程序的执行顺序,使得程序可以根据条件执行不同的代码路径。

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)
  }
}

Tags:

最近发表
标签列表