四时宝库

程序员的知识宝库

go 在函数内部, return语句对协程的影响?

在函数内部, return语句对协程的影响?

package main
import (
    "fmt"
    "time"
)
func main() {
    fmt.Println("return:", test())
}
func test() int {
    var i int // 初始值为 0
    i++
    go func() {
        time.Sleep(10 * time.Second)
        fmt.Println("测试return语句对协程的影响") // 这里的协程不会执行, 因为这里有 return 语句, 因为函数已经退出了, 协程来不及执行
    }()
    return i
}

这里的协程不会执行, 因为这里有 return 语句, 因为函数已经退出了, 协程来不及执行, 因为

eturn负责将结果写入返回值中


package main

import "fmt"

func main() {
    fmt.Println("return:", test())// defer 和 return之间的顺序是先返回值, i=0,后defer
}

func test() int {//这里返回值没有命名
    var i int
    defer func() {
        i++
        fmt.Println("defer1", i) //作为闭包引用的话,则会在defer函数执行时根据整个上下文确定当前的值。i=2
    }()
    defer func() {
        i++
        fmt.Println("defer2", i) //作为闭包引用的话,则会在defer函数执行时根据整个上下文确定当前的值。i=1
    }()
    return i
}

test() 先返回 i=0

defer2先于defer1执行

输出结果为:

defer2 1

defer1 2

return: 0

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接