gpt4 book ai didi

go - 在选择中的同一 channel 上读写

转载 作者:IT王子 更新时间:2023-10-29 02:19:43 25 4
gpt4 key购买 nike

这样使用一个 channel 在两个例程之间交换数据是否可以?

c := make(chan int)

go func() {
var i int
select {
case c<- 1:
i = <-c
case i = <-c:
c<- 1
}
fmt.Println(" A - Written 1 red ", i)
}()

var i int
select {
case c<- 2:
i = <-c
case i = <-c:
c<- 2
}
fmt.Println(" B - Written 2 red ", i)

最佳答案

works , 但通常是个坏主意 (tm)

你 future 的软件维护者会因此讨厌你

请注意,如果这些循环不完全相同,那么当主 goroutine 由于没有其他人写入或读取而阻塞时,应用程序将崩溃

package main

import (
"fmt"
)

func main() {
c := make(chan int)

go func() {
for x := 0; x < 5; x++ {
var i int
select {
case c <- 1:
i = <-c
case i = <-c:
c <- 1
}
fmt.Println(" A - Written 1 red ", i)
}
}()
for x := 0; x < 5; x++ {
var i int
select {
case c <- 2:
i = <-c
case i = <-c:
c <- 2
}
fmt.Println(" B - Written 2 red ", i)
}
}

输出:

 B - Written 2 red  1
A - Written 1 red 2
B - Written 2 red 1
A - Written 1 red 2
B - Written 2 red 1
A - Written 1 red 2
B - Written 2 red 1
A - Written 1 red 2
B - Written 2 red 1

Program exited.

关于go - 在选择中的同一 channel 上读写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54724403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com