Go 匿名函数

在 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

这里,匿名函数接收两个整数参数 n1n2

func(n1, n2 int) {
  ...
}

由于我们将匿名函数分配给 sum 变量,我们通过变量名调用该函数。

sum(5, 3)

这里,53 是传递给函数的参数。


从匿名函数返回值

与普通函数一样,我们也可以从匿名函数返回值。例如,

// 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 变量。该函数计算 n1n2 的和并返回它。


示例:匿名函数返回值

// 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() 函数,该函数返回和的平方。

因此,在我们的程序中,匿名函数首先返回 69 的和,即 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() 函数时,匿名函数也会被调用并返回递增的数字。

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战