MST

星途 面试题库

面试题:Go中defer与goroutine的基础交互问题

在Go语言中,假设你有一个函数,函数内部启动了一个goroutine,并且函数中还有defer语句。请描述当函数正常返回时,defer语句与goroutine的执行顺序是怎样的?为什么会这样?
28.7万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试
  1. 执行顺序
    • 当函数正常返回时,会先执行defer语句,然后函数返回,而启动的goroutine会在函数返回后继续独立执行,与函数的返回过程没有直接的执行顺序依赖。
  2. 原因
    • defer语句:在Go语言中,defer语句会在函数即将返回时按后进先出(LIFO)的顺序执行。这是Go语言设计中确保资源清理等操作的一种机制。例如在打开文件后,使用defer来关闭文件,无论函数以何种方式返回(正常返回或因错误返回),defer语句都会被执行。
    • goroutine:goroutine是Go语言中实现并发的轻量级线程。一旦启动,它就会在独立的协程中执行,与启动它的函数的执行流程是分离的。函数返回并不会等待goroutine执行完毕,goroutine会继续在后台运行,直到它自己执行完成或者程序退出。所以函数正常返回时,会先处理defer语句的逻辑,然后返回,goroutine继续独立执行不受影响。