golang中的闭包


本文摘自网络,作者,侵删。

go语言中函数可以作为返回值,可以作为参数,可以作为右值绑定到变量,golan把这些返回值,参数,或变量称为function value,函数指令在编译期间生成,而function value本质上是一个指针,指向一个runtime.funcval结构体,这个结构体里面只有一个地址——函数指令的入口地址。假设有如下代码:

func A(i int){
    i++
    fmt.Println(i)
}

func B(){
    f1:= A
    f1(1)
}
func C(){
    f2:=A
    f2(1)
}

f1和f2都指向同一个函数A(int),其指令入口为addr1,编译阶段编译器会在只读数据段为他分配一个funcval结构体fn指向addr1,而他本身的地址会在执行阶段赋给f1和f2,既然只要通过addr1就可以执行函数A(),为什么还要通过fn这个结构体中转一下呢,这是为闭包准备的。

阅读剩余部分

相关阅读 >>

聊聊cortex的ingester

Golang开发工程师是做什么的

Golang cGo是什么

Golang无法导包怎么办?

Go在谷歌:以软件工程为目的的语言设计

Go语言(Golang)环境配置安装包下载安装教程

Go - 统一定义 api 错误码

Golang 可以开发 web 吗?

Golang如何做一个服务器?

用 wasmedge 中的嵌入式 webassembly 函数扩展 Golang 应用程序

更多相关阅读请进入《Go》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...