首页 > 后端开发 > Golang > 正文

Go语言闭包:为什么打印的是内存地址而不是返回值?

花韻仙語
发布: 2025-02-23 14:22:14
原创
449人浏览过

go语言闭包:为什么打印的是内存地址而不是返回值?

Go语言闭包详解:为何输出内存地址而非返回值?

问题:

以下Go代码片段的输出结果并非预期的返回值,而是个奇怪的数字(例如:4771344):

package main

import "fmt"

func test() func() int {
    a := 10
    return func() int {
        return a
    }
}

func main() {
    fmt.Printf("%d", test()) // 错误之处
}
登录后复制

解答:

立即学习go语言免费学习笔记(深入)”;

问题在于main函数中fmt.Printf("%d", test())的调用方式。test()函数返回的是一个闭包函数,而不是闭包函数的执行结果。fmt.Printf直接打印test()的返回值,也就是闭包函数的内存地址,而非闭包函数的返回值。

要获取闭包函数的返回值10,需要先调用test()获得闭包函数,然后再执行该闭包函数:

package main

import "fmt"

func test() func() int {
    a := 10
    return func() int {
        return a
    }
}

func main() {
    fmt.Printf("%d\n", test()()) // 正确调用方式
}
登录后复制

这段修改后的代码会正确输出10。 test()返回一个匿名函数,test()()则执行这个匿名函数并返回其结果。 理解Go语言闭包的关键在于,闭包函数本身是一个值,它持有外部作用域变量a的引用,只有调用闭包函数才能得到其返回值。

以上就是Go语言闭包:为什么打印的是内存地址而不是返回值?的详细内容,更多请关注php中文网其它相关文章!

全能打印神器
全能打印神器

全能打印神器是一款非常好用的打印软件,可以在电脑、手机、平板电脑等设备上使用。支持无线打印和云打印,操作非常简单,使用起来也非常方便,有需要的小伙伴快来保存下载体验吧!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号