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

Go语言闭包:为什么打印闭包函数会输出奇怪的数字而不是预期值?

霞舞
发布: 2025-02-23 14:32:09
原创
935人浏览过

go语言闭包:为什么打印闭包函数会输出奇怪的数字而不是预期值?

Go语言闭包陷阱:意外的输出

Go语言闭包允许函数访问其定义时的外部变量,这带来了强大的功能,但也可能导致一些令人困惑的输出。

问题:闭包输出非预期值

以下代码片段演示了这个问题:

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

<code class="go">package main

import "fmt"

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

func main() {
    fmt.Println(test()) // 输出闭包函数的内存地址
}</code>
登录后复制

预期输出是 10,但实际输出却是一个很大的数字,这是闭包函数的内存地址。

原因:打印的是函数地址而非返回值

阿里云-虚拟数字人
阿里云-虚拟数字人

阿里云-虚拟数字人是什么? ...

阿里云-虚拟数字人2
查看详情 阿里云-虚拟数字人

fmt.Println(test()) 打印的是 test() 函数的返回值,即闭包函数本身,而不是闭包函数的执行结果。 test() 返回的是一个函数,而 fmt.Println 对函数的默认输出是其内存地址。

解决方案:调用闭包函数获取返回值

要获得闭包函数的预期返回值 10,需要先调用闭包函数:

<code class="go">package main

import "fmt"

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

func main() {
    fmt.Println(test()()) // 正确的调用方式,输出 10
}</code>
登录后复制

test()() 先调用 test() 获取闭包函数,然后立即执行该闭包函数,最终打印出 a 的值。

通过这个例子,我们了解到,直接打印闭包函数会输出其内存地址,而要获取闭包函数的实际返回值,必须先调用该函数。 这提醒我们注意Go语言闭包的特性,避免因误用而产生意料之外的结果。

以上就是Go语言闭包:为什么打印闭包函数会输出奇怪的数字而不是预期值?的详细内容,更多请关注php中文网其它相关文章!

相关标签:
全能打印神器
全能打印神器

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

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

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