Go学习每日一问(14)-defer预计算参数
文章目录
每次学习并整理一个Golang的知识点,每天进步一点点。今天学习下defer预计算参数的一个知识点🤔
日省吾身
- 下面代码的输出结果?
|
|
思考后看下方答案…
答疑解惑
参考答案:
输出结果:5 知识点:defer
- Go 语言的
defer
会在当前函数或者方法返回之前执行传入的函数。它会经常被用于关闭文件描述符、关闭数据库连接以及解锁资源。 - 调用
defer
关键字会立刻对函数中引用的外部参数进行拷贝,所以hello(n)
的结果不是在 main 函数退出之前计算的,而是在defer
关键字调用时计算的; - 这个例子中,
hello()
函数的参数在执行defer
语句的时候会保存一份n的副本,在实际调用 hello() 函数时使用,所以输出结果是:5
;
以上,你做对了吗?😊
其他相关答案或补充知识点,欢迎在评论区留言补充!
扩展阅读
对于上述问题,如果想把n+10
的值传入到hello()
函数中,该怎么办呢?
其实也很简单,我们只需要向 defer
关键字传入匿名函数
即可,例如:
|
|
上面的输出结果为: 15
;
虽然调用 defer
关键字时也使用值传递,但是因为拷贝的是函数指针,所以 hello(n)
会在 main 函数返回前被调用并打印出符合预期的结果;
下期提问
1.下面代码的输出结果是?
|
|
- A. l1 is nil
- B. l2 is nil
- C. compilation error
2.下面代码的输出结果是?
|
|
- A. B
- B. 66
- C. compilation error
答案及解析将在下期文章中给出,欢迎大家在评论区写出你的答案;独乐乐不如众乐乐,交流学习,互相进步。
欢迎转发和评论。更多优质原创文章,欢迎关注微信公众号“IYue爱月”或扫描下方二维码: