Go每日一题(2) 的题目如下

4532 次点击 · 7 赞 ·大约8小时之前 开始浏览   · 来源「Golang来啦」

下面这段代码输出的内容

package main

import (
    "fmt"
)

func main() {
    defer_call()
}

func defer_call() {
    defer func() { fmt.Println("打印前") }()
    defer func() { fmt.Println("打印中") }()
    defer func() { fmt.Println("打印后") }()

    panic("触发异常")
}
4532 阅读
40 回复
poppowerlb2
poppowerlb2 · #1 · 3年之前

打印后

打印中

打印前

panic: 触发异常

alphayan
alphayan · #2 · 3年之前

打印后 打印中 打印前 panic: 触发异常

gk7th
gk7th · #3 · 3年之前

打印后

打印中

打印前

panic: 触发异常

Esac_Ben
Esac_Ben · #4 · 3年之前

Mark.

euibieur894
euibieur894 · #5 · 3年之前

打卡

Natsuwau
Natsuwau · #6 · 3年之前

mark

dingweihua
dingweihua · #7 · 3年之前

mark 当出现panic时,也会执行defer。

ywp-repo
ywp-repo · #8 · 3年之前

遇 defer 关键字 后进先出

dingweihua
dingweihua · #9 · 3年之前

题目重复了 看到29天前我的回复了 哈哈

sheep
sheep · #10 · 3年之前

mark

henry1
henry1 · #11 · 3年之前

ok

brothersam
brothersam · #12 · 3年之前

后 中 前 异常

feiyang
feiyang · #13 · 3年之前

当出现 panic 语句的时候,会先按照 defer 的后进先出的顺序执行,最后才会执行panic。

hasbug
hasbug · #14 · 3年之前

mark

lwcbest
lwcbest · #15 · 3年之前
defer func() { fmt.Println("打印前") }()
defer func() { fmt.Println("打印中") }()
defer func() { fmt.Println("打印后") }()

panic("触发异常")

答案:

打印后 打印中 打印前 panic: 触发异常

defer都执行完才真正退出当前func

droice
droice · #16 · 3年之前

打卡

hypersus
hypersus · #17 · 3年之前

踩坑打卡

NovaChaos
NovaChaos · #18 · 3年之前

mk

brothersam
brothersam · #19 · 3年之前

后中前异常

feiyang
feiyang · #20 · 3年之前
feiyangfeiyang #13 回复

当出现 panic 语句的时候,会先按照 defer 的后进先出的顺序执行,最后才会执行panic。

defer 的执行顺序是后进先出。当出现 panic 语句的时候,会先按照 defer 的后进先出的顺序执行,最后才会执行panic。

Dessert
Dessert · #21 · 3年之前

return和panic的内容最后出,先弹出defer

hasbug
hasbug · #22 · 3年之前

mark

summers
summers · #23 · 3年之前

m

donstpast
donstpast · #24 · 3年之前

打印后 打印中 打印前 panic: 触发异常

a406299736
a406299736 · #25 · 3年之前

mark.......

bsdx866
bsdx866 · #26 · 2年之前

image.png

haha_cat
haha_cat · #27 · 2年之前

mark

QRQRQRqrqr
QRQRQRqrqr · #28 · 2年之前

image.png

hasbug
hasbug · #29 · 2年之前

mark

huanmengerkong
huanmengerkong · #30 · 2年之前

你好,这个怎么可以看历史的题目呢

wong
wong · #31 · 2年之前

mark

Dessert
Dessert · #32 · 2年之前
DessertDessert #21 回复

return和panic的内容最后出,先弹出defer

当出现 panic 语句的时候,会先按照 defer 的后进先出的顺序执行,最后 才会执行panic

huangyf168
huangyf168 · #33 · 2年之前

打卡

wzbwzt
wzbwzt · #34 · 2年之前

1

a406299736
a406299736 · #35 · 2年之前

11111111111111

Ysmword
Ysmword · #36 · 2年之前

哈哈哈,可以这么变化下,感觉会误导很多人:


package main

import "fmt"

func defer_call() {
    defer func() {
        if p := recover(); p != nil {
            fmt.Println(p)
        }
    }()
    defer func() {
        fmt.Println("打印前")
    }()
    defer func() {
        fmt.Println("打印中")
    }()
    defer func() {
        fmt.Println("打印后")
    }()

    panic("触发异常")
}

func main() {
    defer_call()
}
feiyang
feiyang · #37 · 2年之前

当出现 panic 语句的时候,会先按照 defer 的后进先出的顺序执行,最后才会执行panic。

hasbug
hasbug · #38 · 2年之前

mark

feiyang
feiyang · #39 · 2年之前

当出现 panic 语句的时候,会先按照 defer 的后进先出的顺序执行,最后才会执行panic。

hasbug
hasbug · #40 · 2年之前

mark

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传