经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Go语言 » 查看文章
golang的匿名函数和普通函数的区别解析
来源:jb51  时间:2023/3/29 10:07:42  对本文有异议

golang的匿名函数和普通函数的区别

匿名函数是不具名的函数,可以在不定义函数名的情况下直接使用,通常用于函数内部的局部作用域中。而普通函数则是通过定义函数名,在任何地方都可以直接调用的函数。
在 Go 中,匿名函数与普通函数有以下区别:

  • 匿名函数可以在函数内部定义,普通函数只能在包级别定义;
  • 匿名函数可以在定义后立即调用,也可以赋值给一个变量后再调用,而普通函数只能通过函数名调用;
  • 匿名函数可以访问并修改外部变量,即闭包特性,而普通函数只能访问参数和全局变量;
  • 匿名函数可以作为函数参数传递,也可以作为函数返回值,而普通函数只能作为函数参数传递。

例如,以下代码使用了匿名函数:

  1. package main
  2. import "fmt"
  3. func main() {
  4. func() {
  5. fmt.Println("Hello, World!")
  6. }()
  7. }

在这个例子中,我们定义了一个匿名函数,并在函数定义后立即调用。该匿名函数没有名称,没有参数,没有返回值,仅仅打印 “Hello, World!”。由于该函数是在 main 函数内部定义的,因此只能在 main 函数内部调用,外部无法访问。

匿名函数可以访问并修改外部变量,即闭包特性

  1. s := []string{"我喜欢", "邓文怡"}
  2. func(){
  3. s[1] = "编程"
  4. s = append(s, "和", "写作")
  5. }()
  6. for _, v := range s {
  7. print(v, " ")
  8. }
  9. // 我喜欢 编程 和 写作

在这个例子中,我们定义了一个字符串切片 s,包含两个元素 “我喜欢” 和 “邓文怡”。然后定义了一个匿名函数,并在函数定义后立即调用。在该匿名函数中,我们将 s 切片的第二个元素修改为 “编程”,并将 “和” 和 “写作” 两个元素添加到 s 切片的末尾。最后,通过使用 range 循环遍历 s 切片的每个元素,并将其打印出来。因此,打印输出的结果为 “我喜欢 编程 和 写作”。值得注意的是,由于该匿名函数是在 main 函数内部定义的,因此只能在 main 函数内部调用,外部无法访问。

由于该匿名函数是在 main 函数内部定义的,因此可以访问和修改 s 切片。在该匿名函数定义时,它引用了变量 s,因此它形成了一个闭包,即该匿名函数“捕获”了在其定义范围内声明的变量 s。所以,在匿名函数中修改 s 切片的值也影响到了 main 函数中 s 切片的值。 这就是匿名函数的闭包特性:函数可以访问并修改其定义范围内的变量。

补充:Golang的匿名函数

golang中的匿名函数 golang中的匿名函数1.匿名函数介绍2.匿名函数使用方式2.1定义时直接调用2.2将匿名函数赋值给一个变量2.3定义全局匿名函数

golang中的匿名函数

1.匿名函数介绍

golang支持匿名函数,如果某些函数仅想在特定位置使用一次,那么可以考虑使用匿名函数。
匿名函数也可以实现多次调用。

2.匿名函数使用方式

2.1定义时直接调用

示例代码:

  1. package main
  2. import (
  3. "fmt"
  4. )
  5.  
  6. func main() {
  7. fmt.Println("Hello World!");
  8.  
  9. //匿名函数使用方式1:定义时直接调用。
  10. //(num1 int,num2 int),形参前不写函数名,并在函数后直接调用。
  11. res := func (num1 int,num2 int) int {
  12. return num1 + num2
  13. }(2,3)
  14.  
  15. fmt.Printf("res的值为:%v",res)
  16. }

结果:

在这里插入图片描述

2.2将匿名函数赋值给一个变量

示例代码:

  1. package main
  2. import (
  3. "fmt"
  4. )
  5.  
  6. func main() {
  7. fmt.Println("Hello World!");
  8.  
  9. //匿名函数使用方式2:将匿名函数赋值给变量,使用变量调用。
  10. add := func (num1 int,num2 int) int {
  11. return num1 + num2
  12. }
  13.  
  14. //通过函数变量 调用函数。
  15. res := add(2,3)
  16.  
  17. fmt.Printf("add的类型为:%T,res的值为:%v",add,res)
  18. }

结果:

在这里插入图片描述

add的类型为 函数 func(int,int) int 类型。

2.3定义全局匿名函数

  1. package main
  2. import (
  3. "fmt"
  4. )
  5.  
  6. //匿名函数使用方式3:将函数赋值给全局变量。
  7. var Add = func (num1 int,num2 int) int{
  8. return num1 + num2
  9. }
  10.  
  11. func main() {
  12. fmt.Println("Hello World!");
  13.  
  14. res := Add(2,3)
  15. fmt.Printf("Add全局变量的类型:%T,res的类型:%T,res的值为:%v",Add,res,res)
  16.  
  17. }

结果:

在这里插入图片描述

到此这篇关于golang的匿名函数和普通函数的区别的文章就介绍到这了,更多相关go匿名函数内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号