package main
import (
"fmt"
)
func main() {
ch1 := make(chan int)
ch1 <- 200
go readData(ch1)
fmt.Println("main is over")
}
func readData(ch <-chan int) {
data := <-ch
fmt.Println("data is ", data)
}
以上代码会引起fatal error; 但是如果把加粗的两行调换位置,程序就正常了。
不明白为什么会引起这个错误,求大神指导。
你好,不知道你还有没有这个问题,这个牵扯到关于routine的理解。原因是这样,如果go关键字在前面,它会开一个goroutine并且持续往下走,不会阻塞主线程,而如果ch1 <- 这个在前面的话,这时候ch的另一边根本没有协程去读取,因此到了ch1 <- 这一句直接就over了,等不到go那一句
如果有帮助欢迎采纳哦