c语言编程笔录

首页 >   > 笔记大全

笔记大全

Golang的函数特性是什么

更新时间:2023-08-08

一、函数的定义与声明

Go语言中函数的定义方式为 func 函数名(参数列表) 返回类型 { 函数体 },参数的类型放在变量名后面,多个参数用逗号分隔,返回类型紧随参数列表之后。
例如:

func add(a, b int) int {
    return a + b
}
其中 add 是函数名,a 和 b 是参数,int 是返回类型,函数体中的 return 用于返回结果。
函数的声明方式有两种,分别是常规声明和匿名声明。常规声明可以通过 func 关键字加函数名和参数列表来声明一个函数,而匿名声明可以直接将一个函数赋值给一个变量或者作为参数传递给另一个函数。

二、函数的参数传递

在Go语言中,函数参数的传递方式是值传递。也就是说,函数调用时传递的是参数的拷贝,而不是参数本身。这意味着在函数内部修改参数的值不会影响到原始参数的值。
例如:

func changeValue(num int) {
    num = 10
}

func main() {
    x := 5
    changeValue(x)
    fmt.Println(x) // 输出为 5,而不是 10
}
上述代码中,changeValue 函数接收一个参数 num,并将其值修改为 10。但在 main 函数中调用 changeValue 函数并输出变量 x 的值时,输出结果还是 5。
如果想要在函数内部修改原始参数的值,可以传递参数的指针。通过指针,我们可以直接修改指针指向的变量的值。
例如:
func changeValue(num *int) {
    *num = 10
}

func main() {
    x := 5
    changeValue(&x)
    fmt.Println(x) // 输出为 10
}
上述代码中,changeValue 函数接收一个指向 int 类型的指针 num,并通过 *num 修改 num 指向的变量的值为 10。在 main 函数中调用 changeValue 函数并输出变量 x 的值时,输出结果为 10。

三、函数的返回值

在Go语言中,函数可以返回一个或多个值。返回值必须在函数声明时指定,并通过 return 语句进行返回。
例如:

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

func split(sum int) (x, y int) {
    x = sum * 4 / 9
    y = sum - x
    return
}
上述代码中,add 函数返回两个 int 类型的值,即 a 和 b 的和。split 函数返回两个 int 类型的值,其中 x 和 y 分别是 sum 的四分之三和四分之一。
函数的返回值可以是任何类型,包括自定义类型和函数类型。

四、函数作为参数和返回值

Go语言中的函数可以作为参数传递给另一个函数,也可以作为函数的返回值。
作为参数传递的函数可以通过将其类型声明为 func(xxx) 的方式传递给另一个函数。例如:

func applyFunction(f func(int, int) int, a, b int) int {
    return f(a, b)
}

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

func main() {
    result := applyFunction(add, 2, 3)
    fmt.Println(result) // 输出为 5
}
上述代码中,applyFunction 函数接收一个函数类型的参数 f 和两个 int 类型的参数 a 和 b。函数类型的参数 f 可以接收任何符合其函数签名的函数,在本例中传递的是 add 函数。
作为返回值的函数可以直接在另一个函数中声明并返回。例如:
func makeAddFunction() func(int, int) int {
    return func(a, b int) int {
        return a + b
    }
}

func main() {
    add := makeAddFunction()
    result := add(2, 3)
    fmt.Println(result) // 输出为 5
}
上述代码中,makeAddFunction 函数返回一个函数类型的值,该函数接收两个 int 类型的参数并返回其和。在 main 函数中,将返回的函数赋值给 add 变量,并调用 add 函数求和并输出结果。

总结

Go语言中的函数特性包括函数的定义与声明、函数参数传递、函数的返回值以及函数作为参数和返回值。
通过 func 关键字可以定义一个函数,常规声明和匿名声明方式可以灵活使用。
函数的参数传递方式是值传递,传递参数的指针可以修改原始参数的值。
函数可以返回一个或多个值,返回值必须在函数声明时指定,通过 return 语句进行返回。
函数可以作为参数传递给另一个函数,也可以作为函数的返回值,这使得函数的使用更加灵活和高效。