草庐IT

channel​

全部标签

string - Go channel 将每个字母作为字符串而不是整个字符串

我正在创建一个采用字符串值的简单channel。但显然我在每个循环中推送字符串中的每个字母而不是整个字符串。我可能遗漏了一些非常基本的东西。我做错了什么?https://play.golang.org/p/-6E-f7ALbD代码:funcdoStuff(sstring,chchanstring){ch 最佳答案 您的代码在channel上正确发送string:funcdoStuff(sstring,chchanstring){ch问题出在接收端:results:=results将是从channel接收到的单个值(发送到channe

使用 select 的 Golang channel 不会停止

这里是Go-lang新手。我正在尝试Go的Go之旅,遇到了一个关于channel的练习(https://tour.golang.org/concurrency/7)。这个想法是走两棵树,然后评估树是否等价。我想使用等待来自两个channel的结果的选择来解决这个练习。当两者都完成时,我评估生成的slice。不幸的是,该方法进入无限循环。我添加了一些输出以查看发生了什么,并注意到只有一个channel被关闭,然后再次打开。我显然做错了什么,但我看不出是什么。我的问题是我做错了什么?关于关闭使下面的代码进入无限循环的channel,我做了什么假设?packagemainimport("go

使用 select 的 Golang channel 不会停止

这里是Go-lang新手。我正在尝试Go的Go之旅,遇到了一个关于channel的练习(https://tour.golang.org/concurrency/7)。这个想法是走两棵树,然后评估树是否等价。我想使用等待来自两个channel的结果的选择来解决这个练习。当两者都完成时,我评估生成的slice。不幸的是,该方法进入无限循环。我添加了一些输出以查看发生了什么,并注意到只有一个channel被关闭,然后再次打开。我显然做错了什么,但我看不出是什么。我的问题是我做错了什么?关于关闭使下面的代码进入无限循环的channel,我做了什么假设?packagemainimport("go

go - 同一个 Channel 中的两个 goroutine - 它们是如何执行的?

当我从golang.org浏览Golang时,有一个代码片段我不明白:funcsum(a[]int,cchanint,orderint){sum:=0for_,v:=rangea{sum+=v}fmt.Println(order,a)c这是我预期的输出:1[728]2[-940]17-512当我更改代码时:funcmain(){a:=[]int{7,2,8,-9,4,0}c:=make(chanint)a1,a2:=a[:len(a)/2],a[len(a)/2:]gosum(a1,c,1)//x:=为什么输出是这样的:2[-940]1[728]-51712

go - 同一个 Channel 中的两个 goroutine - 它们是如何执行的?

当我从golang.org浏览Golang时,有一个代码片段我不明白:funcsum(a[]int,cchanint,orderint){sum:=0for_,v:=rangea{sum+=v}fmt.Println(order,a)c这是我预期的输出:1[728]2[-940]17-512当我更改代码时:funcmain(){a:=[]int{7,2,8,-9,4,0}c:=make(chanint)a1,a2:=a[:len(a)/2],a[len(a)/2:]gosum(a1,c,1)//x:=为什么输出是这样的:2[-940]1[728]-51712

go routine 不从 channel 中收集所有对象

我有一个go-routine将对象添加到channel中,然后我有4个go-routines来处理channel的对象。处理只是将对象添加到数组。但有时,最终数组中缺少对象。所以我假设channel在某个时候停止收集对象。我有以下代码:packagemainimport("log""sync")funcmain(){j:=0for{ifj==10{break}wg:=sync.WaitGroup{}months:=[]string{"Jan","Feb","Mar","Apr","May","Jun","Jul"}hits:=make(chanstring)i:=0wg.Add(1)g

go routine 不从 channel 中收集所有对象

我有一个go-routine将对象添加到channel中,然后我有4个go-routines来处理channel的对象。处理只是将对象添加到数组。但有时,最终数组中缺少对象。所以我假设channel在某个时候停止收集对象。我有以下代码:packagemainimport("log""sync")funcmain(){j:=0for{ifj==10{break}wg:=sync.WaitGroup{}months:=[]string{"Jan","Feb","Mar","Apr","May","Jun","Jul"}hits:=make(chanstring)i:=0wg.Add(1)g

go - 如果任何 channel 关闭,有没有办法中断选择?

假设我们在两个channel上进行选择。运行几次后,其中一个channel关闭。我怎样才能跳出选择?packagemainimport("fmt")funcmain(){ch:=make(chanint)closed:=make(chanbool,1)gofunc(){fori:=0;i无限阻塞。如何让它发挥作用? 最佳答案 如果channel说没有更多项目,您可以返回:casev,more:= 关于go-如果任何channel关闭,有没有办法中断选择?,我们在StackOverflow

go - 如果任何 channel 关闭,有没有办法中断选择?

假设我们在两个channel上进行选择。运行几次后,其中一个channel关闭。我怎样才能跳出选择?packagemainimport("fmt")funcmain(){ch:=make(chanint)closed:=make(chanbool,1)gofunc(){fori:=0;i无限阻塞。如何让它发挥作用? 最佳答案 如果channel说没有更多项目,您可以返回:casev,more:= 关于go-如果任何channel关闭,有没有办法中断选择?,我们在StackOverflow

go - 如何在不使用接收到的数据的情况下释放 go channel?

我创建了一个channel并希望在不使用接收值的情况下释放它。然而,编译器不允许我这样写代码:fori:=rangech{//code}提示我没有被使用用_代替i也不起作用惯用的方法是什么? 最佳答案 尝试this:packagemainimport("fmt")funcmain(){ch:=make(chanint)close(ch)forrangech{fmt.Println("for")}fmt.Println("done")}输出:done 关于go-如何在不使用接收到的数据的情