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


在 Go 语言中,函数是一种独立的代码块,用于执行特定的任务。函数可以接收参数并返回结果。以下是关于 Go 语言函数、参数和返回值的详细解释:

定义函数

使用 func 关键字来定义函数。

func functionName(parameterList) returnType {
    // 函数体
}
  • functionName:函数名称。
  • parameterList:参数列表,每个参数由参数名称和参数类型组成。
  • returnType:返回值类型,可以是单个类型或多个类型的组合。

函数参数

函数可以接收零个或多个参数,参数由参数名称和参数类型组成。参数类型可以是任何有效的数据类型。

func add(x, y int) int {
    return x + y
}

多返回值

函数可以返回一个或多个值。

func divmod(x, y int) (int, int) {
    return x / y, x % y
}

命名返回值

可以为返回值命名,这样函数体内部就不需要再显式声明返回值。

func divmod(x, y int) (quotient, remainder int) {
    quotient = x / y
    remainder = x % y
    return // 省略返回值列表
}

匿名函数

可以在函数内部定义匿名函数,并将其赋值给变量或直接调用。

add := func(x, y int) int {
    return x + y
}
result := add(3, 5)

函数作为参数

函数可以作为参数传递给其他函数。

func apply(operation func(int, int) int, x, y int) int {
    return operation(x, y)
}

函数闭包

闭包是一个函数值,它引用了函数体之外的变量。

func adder() func(int) int {
    sum := 0
    return func(x int) int {
        sum += x
        return sum
    }
}

Defer 语句

defer 语句会延迟函数调用,直到包含该语句的函数执行完毕才会执行。

func main() {
    defer fmt.Println("World")
    fmt.Println("Hello")
}

错误处理

函数可以返回错误作为其最后一个返回值。

func divide(x, y int) (int, error) {
    if y == 0 {
        return 0, errors.New("division by zero")
    }
    return x / y, nil
}

示例代码

package main

import (
    "fmt"
)

func add(x, y int) int {
    return x + y
}

func main() {
    fmt.Println(add(3, 5)) // 输出: 8

    quotient, remainder := divmod(10, 3)
    fmt.Println("Quotient:", quotient)   // 输出: 3
    fmt.Println("Remainder:", remainder) // 输出: 1

    result := apply(add, 3, 5)
    fmt.Println("Result:", result) // 输出: 8

    sum := adder()
    fmt.Println(sum(1)) // 输出: 1
    fmt.Println(sum(2)) // 输出: 3
    fmt.Println(sum(3)) // 输出: 6

    defer fmt.Println("World") // 输出: World
    fmt.Println("Hello")       // 输出: Hello
}

函数是 Go 语言中非常重要的概念,它们可以用于模块化和组织代码,以及实现代码的复用和扩展。对函数的灵活使用可以帮助提高代码的可维护性和可读性。


原文链接:codingdict.net