📜  Go-函数(1)

📅  最后修改于: 2023-12-03 14:41:32.634000             🧑  作者: Mango

Go 函数

函数是 Go 编程中最基本的组成部分之一,是将代码结构化的主要方式之一。在这篇文章中,我们将介绍 Go 函数的基础知识。

声明函数

函数声明包含函数名称、参数列表和返回类型。示例如下:

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

其中,func 是声明函数的关键字,add 是函数名称,ab 是参数(可以省略类型声明),int 是返回类型,return a + b 是函数的实现。

函数参数和返回值

在 Go 中,可以指定多个参数和返回值。例如:

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

在这个函数中,我们定义了两个输入参数 xy ,并且返回了两个字符串,它们在传入参数时的顺序被交换了。

函数的参数和返回值可以具有命名类型。这样做的好处是可以增加代码的可读性和可维护性。

func trace(message string) (string, error) {
    if len(message) == 0 {
        return "", errors.New("empty message string")
    }
    return message, nil
}

在这个函数中,stringerror 是命名类型。

可变参数

在 Go 中,可以通过使用省略号 ... 来声明可变参数。可变参数必须是函数的最后一个参数。示例如下:

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

这个函数可以接受任意数量的整数,将它们加起来,并返回它们的和。

匿名函数

在 Go 中,可以定义匿名函数。匿名函数可以像变量一样被传递、赋值或调用。示例如下:

func main() {
    add := func(x, y int) int {
        return x + y
    }
    fmt.Println(add(1, 1)) // Output: 2
}

在这个例子中,我们创建了一个名为 add 的变量,并将一个函数赋值给它。

闭包函数

闭包函数是一种特殊的匿名函数,它可以访问其外部定义的变量。示例如下:

func main() {
    name := "Alice"
    greet := func() string {
        return fmt.Sprintf("Hello, %s!", name)
    }
    fmt.Println(greet()) // Output: "Hello, Alice!"
}

在这个例子中,我们定义了一个名为 greet 的闭包函数,它可以访问变量 name

defer

在 Go 中,可以使用 defer 关键字延迟调用函数。在函数返回时,延迟调用的函数会按照它们被定义时的顺序被执行。示例如下:

func main() {
    defer fmt.Println("last")
    defer fmt.Println("middle")
    fmt.Println("first")
}

在这个例子中,first 会被先打印出来,而 middlelast 则会在函数返回时被延迟调用。所以会先打印 first ,然后是 middle ,最后是 last

总结

Go 函数是程序中结构化的基础部分。它们允许我们将代码划分为可重用的块,并在需要时进行调用。本文将基本涵盖了 Go 函数的常见用法和语法。