在 Go 中,我们可以创建一个没有函数名的函数,这被称为匿名函数。例如,
func () {
fmt.Println("Function without name")
}
上面的函数是一个合法的函数,它打印 "无名函数"。它就像 Go 中的普通 函数 一样工作。
Go 匿名函数的工作原理
由于匿名函数没有名称,您可能想知道如何调用该函数。
通常,我们会将匿名函数分配给一个变量,然后使用变量名来调用函数。例如,
//anonymous function
var greet = func (){
// code
}
// function call
greet()
在这里,您可以看到我们使用了变量名 greet 来调用该函数。
示例:Go 匿名函数
package main
import "fmt"
func main() {
// anonymous function
var greet = func() {
fmt.Println("Hello, how are you")
}
// function call
greet()
}
输出
Hello, how are you
在这里,我们将匿名函数分配给变量 greet 并使用 greet()
调用该函数。
带参数的匿名函数
与普通函数一样,匿名函数也可以接受函数参数。例如,
// Program to pass arguments in an anonymous function
package main
import "fmt"
func main() {
// anonymous function with arguments
var sum = func(n1, n2 int) {
sum := n1 + n2
fmt.Println("Sum is:", sum)
}
// function call
sum(5, 3)
}
输出
Sum is: 8
这里,匿名函数接收两个整数参数 n1 和 n2。
func(n1, n2 int) {
...
}
由于我们将匿名函数分配给 sum 变量,我们通过变量名调用该函数。
sum(5, 3)
这里,5 和 3 是传递给函数的参数。
从匿名函数返回值
与普通函数一样,我们也可以从匿名函数返回值。例如,
// Program to return value from an anonymous function
package main
import "fmt"
func main() {
// anonymous function
var sum = func(n1, n2 int) int {
sum := n1 + n2
return sum
}
// function call
result := sum(5, 3)
fmt.Println("Sum is:", result)
}
输出
Sum is: 8
在这里,我们将匿名函数 func(n1,n2 int) int
分配给 sum 变量。该函数计算 n1 和 n2 的和并返回它。
示例:匿名函数返回值
// Program to return the area of a rectangle
package main
import "fmt"
func main() {
// anonymous function
area := func(length, breadth int) int {
return length * breadth
}
// function call using variable name
fmt.Println("The area of rectangle is", area(3,4))
}
输出
The area of rectangle is 12
在上面的程序中,我们定义了一个匿名函数并将其分配给变量 area。返回矩形的面积 length * breadth
(3 * 4) 给 area。
将匿名函数作为其他函数的参数
在 Go 中,我们也可以将匿名函数作为参数传递给其他函数。在这种情况下,我们传递包含匿名函数的变量。例如,
package main
import "fmt"
var sum = 0
// regular function to calculate square of numbers
func findSquare(num int) int {
square := num * num
return square
}
func main() {
// anonymous function that returns sum of numbers
sum := func(number1 int, number2 int) int {
return number1 + number2
}
// function call
result := findSquare(sum(6, 9))
fmt.Println("Result is:", result)
}
输出
Result is: 225
在上面的示例中,我们创建了两个函数
- 一个匿名函数,用于查找两个数字的和
- 一个普通函数
findSquare()
,用于查找数字的平方。
请注意 main()
中的函数调用
result := findSquare(sum(6, 9))
在这里,我们将匿名函数作为函数参数传递给 findSquare()
函数。
匿名函数返回两个参数的和。然后将此和传递给 findSquare()
函数,该函数返回和的平方。
因此,在我们的程序中,匿名函数首先返回 6 和 9 的和,即 15。
然后将此值传递给 findSquare()
函数,该函数返回 15 的平方,即 225。
在 Go 中返回匿名函数
我们也可以在 Go 中返回一个匿名函数。为此,我们需要在普通函数中创建一个匿名函数并返回它。例如,
// Program to return an anonymous function
package main
import "fmt"
// function that returns an anonymous function
func displayNumber() func() int {
number := 10
return func() int {
number++
return number
}
}
func main() {
a := displayNumber()
fmt.Println(a())
}
输出
11
在上面的程序中,请注意 displayNumber()
函数中的这一行:
func displayNumber() func() int {
这里,func()
表示 displayNumber()
返回一个函数,而 int
表示匿名函数返回一个整数。请注意,displayNumber()
是一个普通函数。
在 displayNumber()
函数中,我们创建了一个匿名函数。
return func() int {
…
}
这里,我们正在返回匿名函数。因此,当调用 displayNumber()
函数时,匿名函数也会被调用并返回递增的数字。