📅  最后修改于: 2023-12-03 15:01:00.472000             🧑  作者: Mango
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时,它都会返回一个自增的整数。
在Go中,defer语句可以用于在函数返回之前执行一些操作。例如:
func cleanup() {
fmt.Println("Cleaning up!")
}
func main() {
defer cleanup()
fmt.Println("Doing something...")
}
运行上述代码会先输出 "Doing something...",然后才会输出 "Cleaning up!"。
Go 函数是一种非常强大的工具,可以用于解决各种编程问题。此外,函数还有许多有用的特性,如多返回值、可变参数、匿名函数和闭包等等。掌握这些特性可以帮助您更好地理解和使用Go。