函数与方法

函数是 Go 语言中代码组织和复用的基本单元,方法则是面向对象编程的重要概念。本部分将深入讲解函数和方法的各种用法,帮助你编写模块化、可复用的代码。

章节内容

13. 函数定义

函数是 Go 程序的基本构建块。本章讲解:

  • 函数的声明和定义
  • 函数参数和返回值
  • 命名返回值
  • 空白标识符
  • 函数作为值和类型

14. 函数参数与返回值

Go 语言的函数支持灵活的参数传递方式。本章涵盖:

  • 位置参数
  • 可变参数
  • 多返回值
  • 命名返回值
  • 参数传递方式(值传递 vs 引用传递)

15. 匿名函数与闭包

匿名函数和闭包是 Go 语言的强大特性。本章介绍:

  • 匿名函数的定义和使用
  • 闭包的概念和原理
  • 闭包的应用场景
  • 闭包的注意事项

16. 方法

方法是带有接收者的函数,是 Go 面向对象的核心。本章讲解:

  • 方法的定义
  • 值接收者 vs 指针接收者
  • 方法集
  • 方法的继承和重写
  • 方法表达式

17. 接口

接口是 Go 语言实现多态的关键机制。本章涵盖:

  • 接口的定义
  • 接口的实现
  • 接口组合
  • 空接口
  • 接口断言

学习要点

函数定义

// 基本函数
func add(a, b int) int {
    return a + b
}

// 多返回值
func divide(a, b int) (int, error) {
    if b == 0 {
        return 0, errors.New("除数不能为零")
    }
    return a / b, nil
}

匿名函数与闭包

// 匿名函数
func() {
    fmt.Println("匿名函数")
}()

// 闭包
func counter() func() int {
    count := 0
    return func() int {
        count++
        return count
    }
}

方法

type Rectangle struct {
    Width, Height float64
}

// 值接收者
func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

// 指针接收者
func (r *Rectangle) Scale(factor float64) {
    r.Width *= factor
    r.Height *= factor
}

接口

type Shape interface {
    Area() float64
}

// 接口实现(隐式)
func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

学习建议

  1. 理解值传递:Go 语言都是值传递,理解指针的作用
  2. 选择接收者类型:根据是否需要修改接收者选择值或指针
  3. 接口设计:接口要小而精,遵循单一职责原则
  4. 闭包陷阱:注意循环变量捕获问题