在函数内部, 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