📌  相关文章
📜  go 函数 - Go 编程语言(1)

📅  最后修改于: 2023-12-03 15:01:00.472000             🧑  作者: Mango

Go 函数 - Go 编程语言

Go 语言中的函数是一段代码块, 可以被多次调用执行,可以带有参数和返回值。在Go中,函数是一等公民,具有许多功能和特性。

基本语法

函数的基本语法如下:

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

其中, "func"是函数的关键字,后跟着函数名和参数列表。函数名必须遵循标识符的规则,参数列表包括参数名和类型,用逗号分隔开,如果没有参数,那么就是空的括号。返回值类型指函数返回值的类型。

下面是一个简单的例子:

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

这个函数接受两个整数作为参数,返回它们的和。

调用函数的语法很简单:

result := add(1, 2)
fmt.Println(result) // 输出 3
多返回值

Go 语言支持多返回值。例如:

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

这个函数接受两个字符串作为参数,并返回它们的倒序。

调用这个函数:

a, b := swap("hello", "world")
fmt.Println(a, b) // 输出 world hello
可变参数

在Go中,函数也可以接受可变数量的参数。例如:

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

这个函数接受任意数量的整数作为参数,并返回它们的总和。

调用这个函数:

result := sum(1, 2, 3, 4)
fmt.Println(result) // 输出 10
匿名函数

在Go中,函数也可以是匿名的,即不使用函数名定义一个函数。这种函数可以被赋值给一个变量,也可以像普通函数一样被调用。

add := func(a, b int) int {
    return a + b
}
result := add(1, 2)
fmt.Println(result) // 输出 3
闭包

闭包是函数和其引用的外部变量构成的实体。这意味着,闭包不仅包含了函数本身的代码,还包含了在函数定义时存在的外部环境。

例如:

func nextInt() func() int {
    i := 0
    return func() int {
        i++
        return i
    }
}

nextIntFunc := nextInt()
fmt.Println(nextIntFunc()) // 输出 1
fmt.Println(nextIntFunc()) // 输出 2
fmt.Println(nextIntFunc()) // 输出 3

这个函数返回一个匿名函数,该函数访问了其定义时存在的外部变量i。每次调用nextIntFunc时,它都会返回一个自增的整数。

defer

在Go中,defer语句可以用于在函数返回之前执行一些操作。例如:

func cleanup() {
    fmt.Println("Cleaning up!")
}

func main() {
    defer cleanup()
    fmt.Println("Doing something...")
}

运行上述代码会先输出 "Doing something...",然后才会输出 "Cleaning up!"。

总结

Go 函数是一种非常强大的工具,可以用于解决各种编程问题。此外,函数还有许多有用的特性,如多返回值、可变参数、匿名函数和闭包等等。掌握这些特性可以帮助您更好地理解和使用Go。