第3课:Golang控制结构与函数

61 阅读3分钟

课程目标

  • 掌握Golang中的控制结构,包括ifforswitch
  • 理解函数的定义与调用方法;
  • 熟悉Golang中的多返回值与错误处理机制。

1. 控制结构

1.1 if语句

  • 功能:用于条件判断,根据条件的真假执行不同的代码块;

  • 语法

    if 条件 {
        // 条件为真时执行的代码
    } else {
        // 条件为假时执行的代码
    }
    
  • 示例

    package main
    
    import "fmt"
    
    func main() {
        age := 18
        if age >= 18 {
            fmt.Println("You are an adult.")
        } else {
            fmt.Println("You are a minor.")
        }
    }
    
  • if语句的变体

    • if语句中定义变量:

      if age := 18; age >= 18 {
          fmt.Println("You are an adult.")
      }
      

1.2 for循环

  • 功能:用于重复执行代码块;

  • 语法

    for 初始化; 条件; 后续操作 {
        // 循环体
    }
    
  • 示例

    package main
    
    import "fmt"
    
    func main() {
        for i := 0; i < 5; i++ {
            fmt.Println(i)
        }
    }
    
  • for循环的变体

    • 省略初始化与后续操作(类似while循环):

      i := 0
      for i < 5 {
          fmt.Println(i)
          i++
      }
      
    • 无限循环:

      for {
          fmt.Println("This loop will run forever.")
      }
      

1.3 switch语句

  • 功能:用于多条件分支判断;

  • 语法

    switch 表达式 {
    case1:
        // 表达式等于值1时执行的代码
    case2:
        // 表达式等于值2时执行的代码
    default:
        // 表达式不等于任何case值时执行的代码
    }
    
  • 示例

    package main
    
    import "fmt"
    
    func main() {
        day := "Monday"
        switch day {
        case "Monday":
            fmt.Println("Today is Monday.")
        case "Tuesday":
            fmt.Println("Today is Tuesday.")
        default:
            fmt.Println("Today is another day.")
        }
    }
    
  • switch语句的变体

    • 省略表达式(类似if-else链):

      switch {
      case age < 18:
          fmt.Println("You are a minor.")
      case age >= 18:
          fmt.Println("You are an adult.")
      }
      

2. 函数的定义与调用

2.1 函数的定义

  • 功能:将一段代码封装为一个可重用的单元;

  • 语法

    func 函数名(参数列表) 返回值类型 {
        // 函数体
    }
    
  • 示例

    package main
    
    import "fmt"
    
    func greet(name string) {
        fmt.Println("Hello,", name)
    }
    
    func main() {
        greet("Alice")
    }
    

2.2 函数的调用

  • 功能:执行函数体中的代码;

  • 语法

    函数名(参数列表)
    
  • 示例

    greet("Bob") // 输出:Hello, Bob
    

2.3 函数的返回值

  • 功能:函数可以返回一个或多个值;

  • 语法

    func 函数名(参数列表) 返回值类型 {
        // 函数体
        return 返回值
    }
    
  • 示例

    package main
    
    import "fmt"
    
    func add(a, b int) int {
        return a + b
    }
    
    func main() {
        result := add(2, 3)
        fmt.Println("Result:", result) // 输出:Result: 5
    }
    

3. 多返回值与错误处理

3.1 多返回值

  • 功能:函数可以返回多个值;

  • 语法

    func 函数名(参数列表) (返回值类型1, 返回值类型2) {
        // 函数体
        return 返回值1, 返回值2
    }
    
  • 示例

    package main
    
    import "fmt"
    
    func divide(a, b int) (int, error) {
        if b == 0 {
            return 0, fmt.Errorf("division by zero")
        }
        return a / b, nil
    }
    
    func main() {
        result, err := divide(10, 2)
        if err != nil {
            fmt.Println("Error:", err)
        } else {
            fmt.Println("Result:", result) // 输出:Result: 5
        }
    }
    

3.2 错误处理

  • 功能:通过返回错误值来处理异常情况;

  • 常用方法

    • 使用error类型表示错误;
    • 使用fmt.Errorf创建错误;
    • 使用if语句检查错误。
  • 示例

    package main
    
    import (
        "errors"
        "fmt"
    )
    
    func divide(a, b int) (int, error) {
        if b == 0 {
            return 0, errors.New("division by zero")
        }
        return a / b, nil
    }
    
    func main() {
        result, err := divide(10, 0)
        if err != nil {
            fmt.Println("Error:", err) // 输出:Error: division by zero
        } else {
            fmt.Println("Result:", result)
        }
    }
    

3.3 命名返回值

  • 功能:为返回值命名,简化代码;

  • 语法

    func 函数名(参数列表) (返回值1 类型1, 返回值2 类型2) {
        // 函数体
        返回值1 = 值1
        返回值2 = 值2
        return
    }
    
  • 示例

    package main
    
    import "fmt"
    
    func sumAndDiff(a, b int) (sum, diff int) {
        sum = a + b
        diff = a - b
        return
    }
    
    func main() {
        s, d := sumAndDiff(10, 5)
        fmt.Println("Sum:", s) // 输出:Sum: 15
        fmt.Println("Diff:", d) // 输出:Diff: 5
    }
    


4. 总结

  • 本课介绍了Golang中的控制结构(ifforswitch)以及函数的定义与调用方法;
  • 通过多返回值与错误处理的示例,学员可以编写更健壮的函数;
  • 下一课将深入学习Golang的数据结构,为后续的接口测试打下坚实基础。

课后练习

练习题:编写一个字符串工具函数

  • 要求:

    • 实现字符串反转功能;
    • 使用for循环实现反转逻辑;
    • 使用多返回值处理可能的错误(如空字符串)。