Go 语言函数、参数和返回值详解


在 Go 语言中,函数是独立的代码块,可以接受参数并返回结果。下面是对 Go 语言中函数、参数和返回值的详细讲解。

1. 函数的定义

函数的基本定义形式如下:

func 函数名(参数列表) (返回值列表) {
    // 函数体
}
  • func:关键字,用于定义函数。
  • 函数名:函数的名称。
  • 参数列表:函数的输入参数,格式为 参数名 类型,多个参数用逗号分隔。
  • 返回值列表:函数的返回值类型,可以有多个返回值,多个类型用逗号分隔。

2. 示例

package main

import "fmt"

// 定义一个简单的函数,没有参数和返回值
func sayHello() {
    fmt.Println("Hello, World!")
}

// 定义一个带有参数和返回值的函数
func add(a int, b int) int {
    return a + b
}

// 定义一个带有多个返回值的函数
func swap(x, y string) (string, string) {
    return y, x
}

// 定义一个可变参数的函数
func sum(nums ...int) int {
    total := 0
    for _, num := range nums {
        total += num
    }
    return total
}

func main() {
    sayHello()

    result := add(3, 4)
    fmt.Println("3 + 4 =", result)

    a, b := swap("Go", "Lang")
    fmt.Println("Swap:", a, b)

    total := sum(1, 2, 3, 4, 5)
    fmt.Println("Sum:", total)
}

3. 参数

3.1 基本参数

参数列表中的每个参数必须指定类型,多个参数可以共享类型:

func add(a int, b int) int {
    return a + b
}

func add(a, b int) int {
    return a + b
}

3.2 可变参数

可变参数允许函数接收任意数量的参数,使用 ... 表示:

func sum(nums ...int) int {
    total := 0
    for _, num := range nums {
        total += num
    }
    return total
}

4. 返回值

4.1 单一返回值

函数可以返回一个单一值:

func add(a int, b int) int {
    return a + b
}

4.2 多个返回值

函数可以返回多个值,用小括号包裹返回值类型:

func swap(x, y string) (string, string) {
    return y, x
}

4.3 命名返回值

可以为返回值命名,命名返回值可以在函数体内视作变量使用,并且可以省略 return 语句中的返回值:

func divide(a, b float64) (result float64, err error) {
    if b == 0 {
        err = fmt.Errorf("cannot divide by zero")
        return
    }
    result = a / b
    return
}

5. 匿名函数和闭包

匿名函数没有函数名,可以立即执行或赋值给变量:

func main() {
    // 立即执行
    func() {
        fmt.Println("Hello from anonymous function")
    }()

    // 赋值给变量
    add := func(a int, b int) int {
        return a + b
    }
    fmt.Println("Anonymous add:", add(3, 4))
}

闭包是可以捕获其外部作用域变量的函数:

func main() {
    counter := func() func() int {
        count := 0
        return func() int {
            count++
            return count
        }
    }()

    fmt.Println(counter())
    fmt.Println(counter())
    fmt.Println(counter())
}

总结

Go 语言的函数定义灵活多样,支持多种参数和返回值类型,并且具备闭包特性,能够满足复杂的编程需求。通过合理使用函数,可以大大提高代码的可读性和可维护性。


原文链接:codingdict.net