登录
首页 >  Golang >  Go问答

研究Defer和println的问题?

来源:stackoverflow

时间:2024-03-04 09:12:26 267浏览 收藏

今天golang学习网给大家带来了《研究Defer和println的问题?》,其中涉及到的知识点包括等等,无论你是小白还是老手,都适合看一看哦~有好的建议也欢迎大家在评论留言,若是看完有所收获,也希望大家能多多点赞支持呀!一起加油学习~

问题内容

我想知道为什么是0而不是1?

这是一个指针而不是一个值。谢谢大家。

package main

import "fmt"

func main() {
    var i = new(int)
    defer func(i *int) {
        fmt.Printf("3:%p,%v\n", i, *i)
    }(i)
    defer fmt.Printf("2:%p,%v\n", i, *i)
    *i++
    fmt.Printf("1:%p,%v\n", i, *i)
}

//1:0x1400001c0a0,1
//2:0x1400001c0a0,0
//3:0x1400001c0a0,1

正确答案


延迟调用的参数会立即计算,但函数调用直到周围函数返回后才会执行。

在第一个 defer 中,您使用调用 func 时收到的参数 i。 在第二个 defer fmt.printf("2:%p,%v\n", i, *i) 中,i 的值已经在 *i++ 之前求值了

希望 this simple and clear example 能帮助到了解文档中写的内容。

import "fmt"

func params() int {
    fmt.println("params")
    return 0
}

func f(int) {
    fmt.println("deferred")
}

func main() {
    defer f(params())
    fmt.println("exit")
}

和结果

params
exit
deferred

终于介绍完啦!小伙伴们,这篇关于《研究Defer和println的问题?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>