不懂就问,Go语言的通道是不是类似于栈,先入后出?【滑稽】
channel是GO语言并发体系中的主推的通信机制,channel是一种特殊的类型是保证协程安全的,也就是在任何时候,同时只能有一个 goroutine 访问通道进行发送和获取数据。
遵循先入先出(First In First Out)的规则,类似于队列,保证收发数据的顺序。这两个特性是channel可以产生共享内存功能的重要原因。
package main
import (
"fmt"
)
func sum(a []int, c chan int) {
tot := 0
for _, j := range a {
tot += j
}
c <- tot
}
func main() {
a := []int{1, 2, 3, 4, 5, 6}
c := make(chan int)
go sum(a[:3], c)
go sum(a[3:], c)
x := <-c
y := <-c
fmt.Println("x = ", x, "y = ", y, "x+y = ", x+y)
}
如果是先入先出,那么这段代码中通道c不是先入6,再入15,那么按照先入先出原则:x应该为6,y应该为15,为什么结果却相反?