登录
首页 >  Golang >  Go问答

golang return defer的疑惑

来源:SegmentFault

时间:2023-01-10 11:41:25 489浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《golang return defer的疑惑》,主要介绍了defer、go、return,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

package main

import (
    "fmt"
)

func main() {
    fmt.Println(f0()) // 1
    fmt.Println(f1()) // 0
}

func f0() (result int) {
    defer func() {
        result++
    }()
    return 0
}

func f1() (result int) {
    result = 0 //return语句不是一条原子调用,return xxx其实是赋值+RET指令
    return
}
  1. f0中明明返回的是0,是一个整形,虽然有个defer但是他还是一个数字0啊,为啥结果被改为了1
  2. f1中return那里明明啥都没有,给人直观感受就是null,他怎么就被改为了0

正确答案

go里面没有

null
。编程靠只管感受?学习新语言就好好学习这门语言的语法,思想,不要混用。

问题1:defer 执行先于 return。所以会执行result++,因为你返回值定义了result变量,所以其值等于默认值0,result++等于1,只要定义了返回变量名,他会使用变量名返回,而不是你的 return 0

问题2:int默认值为0,slice,map这类复杂类型默认值才为nil

理论要掌握,实操不能落!以上关于《golang return defer的疑惑》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

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