脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Golang - golang的匿名函数和普通函数的区别解析

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

2023-03-30 15:40Deng_Xian_Sheng Golang

匿名函数是不具名的函数,可以在不定义函数名的情况下直接使用,通常用于函数内部的局部作用域中,这篇文章主要介绍了golang的匿名函数和普通函数的区别,需要的朋友可以参考下

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

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

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

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

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

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

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

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

在这个例子中,我们定义了一个字符串切片 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package main
import (
    "fmt"
)
 
func main() {
    fmt.Println("Hello World!");
 
    //匿名函数使用方式1:定义时直接调用。
    //(num1 int,num2 int),形参前不写函数名,并在函数后直接调用。
    res := func (num1 int,num2 int) int {
        return num1 + num2
    }(2,3)
 
    fmt.Printf("res的值为:%v",res)
}

结果:

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

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

示例代码:

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

结果:

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

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

2.3定义全局匿名函数

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

结果:

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

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

原文链接:https://blog.csdn.net/Deng_Xian_Sheng/article/details/129765253

延伸 · 阅读

精彩推荐
  • GolangGo语言实现彩色输出示例详解

    Go语言实现彩色输出示例详解

    这篇文章主要为大家介绍了Go语言实现彩色输出示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    爱吃红薯粉11522022-11-24
  • GolangGolang Gin解析JSON请求数据避免出现EOF错误

    Golang Gin解析JSON请求数据避免出现EOF错误

    这篇文章主要为大家介绍了Golang Gin 优雅地解析JSON请求数据,避免ShouldBindBodyWith出现EOF错误的源码分析,有需要的朋友可以借鉴参考下,希望能够有所帮助...

    EvaCcino9482022-09-29
  • GolangGo语言接口的用法详解

    Go语言接口的用法详解

    本文详细讲解了Go语言接口的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...

    奋斗的大橙子3432022-07-13
  • GolangGo语言实现新春祝福二维码的生成

    Go语言实现新春祝福二维码的生成

    二维码现在是随处度可以看到,买东西,支付,添加好友只要你扫一扫就能完成整个工作,简单且方便。所以利用这个新春佳节做一个带着新春祝福的二维...

    小雄Ya10312023-03-20
  • Golang浅谈goland导入自定义包时出错(一招解决问题)

    浅谈goland导入自定义包时出错(一招解决问题)

    这篇文章主要介绍了浅谈goland导入自定义包时出错(一招解决问题),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    不愿透露姓名的菜鸟28662021-02-26
  • Golang利用 Go 语言编写一个简单的 WebSocket 推送服务

    利用 Go 语言编写一个简单的 WebSocket 推送服务

    这篇文章主要介绍了利用 Go 语言编写一个简单的 WebSocket 推送服务,需要的朋友可以参考下 ...

    alfred_zhong5532020-05-15
  • GolangGoFrame框架gset交差并补集使用实例

    GoFrame框架gset交差并补集使用实例

    这篇文章主要为大家介绍了GoFrame框架gset交差并补集使用实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    王中阳Go4312022-10-18
  • GolangGolang极简入门教程(四):编写第一个项目

    Golang极简入门教程(四):编写第一个项目

    这篇文章主要介绍了Golang极简入门教程(四):编写第一个项目,本文讲解了workspace、包路径、第一个可执行命令等内容,需要的朋友可以参考下 ...

    junjie4842019-11-17