草庐IT

channel1

全部标签

queue - 是否可以将 Go 的缓冲 channel 用作线程安全队列?

我想找到一个队列结构(一个数据容器),它的元素必须是先进先出的。对我来说,结构必须是线程安全的很重要。我打算将此数据容器用作任务或连接池之类的东西。我知道缓冲channel是线程安全的,但我想知道它是否可以用作FIFO,尤其是在并发情况下。如果可以将缓冲channel用作线程安全队列,我是否需要担心它的效率? 最佳答案 在Go中,缓冲channel就是:线程安全的FIFO队列,因此您尝试做的事情是完全有效的。使用这种方法根本不会出现性能问题。 关于queue-是否可以将Go的缓冲chan

go - channel 是做什么用的?

在查看一些Go代码时,我发现了以下内容:ch:=make(chanint)我查阅了一个在线教程,了解GoChannels的工作原理:https://tour.golang.org/concurrency/2但我觉得这个例子不清楚。谁能给我一个简单的解释和一个使用channel的例子吗? 最佳答案 chan是Golang中的一个channel。简而言之,您可以将其视为一个盒子,您可以在其中放置一个项目,然后从另一端拾取它。无缓冲channel缓冲channel这是我为您编写的用于了解channel的小代码。现在更改goroutine的

go - channel 是做什么用的?

在查看一些Go代码时,我发现了以下内容:ch:=make(chanint)我查阅了一个在线教程,了解GoChannels的工作原理:https://tour.golang.org/concurrency/2但我觉得这个例子不清楚。谁能给我一个简单的解释和一个使用channel的例子吗? 最佳答案 chan是Golang中的一个channel。简而言之,您可以将其视为一个盒子,您可以在其中放置一个项目,然后从另一端拾取它。无缓冲channel缓冲channel这是我为您编写的用于了解channel的小代码。现在更改goroutine的

go - channel 是否返回两个值?

我在这个链接中看到了一些代码,很困惑:http://www.darkcoding.net/software/go-lang-after-four-months/第二个值(ok)是什么意思?forself.isRunning{select{caseserverData,ok= 最佳答案 receiveoperator返回的bool变量ok指示接收到的值是在channel上发送的(true)还是由于channel关闭且为空而返回的零值(false)。当Go程序的其他部分关闭fromServer或fromUserchannel时,for循

go - channel 是否返回两个值?

我在这个链接中看到了一些代码,很困惑:http://www.darkcoding.net/software/go-lang-after-four-months/第二个值(ok)是什么意思?forself.isRunning{select{caseserverData,ok= 最佳答案 receiveoperator返回的bool变量ok指示接收到的值是在channel上发送的(true)还是由于channel关闭且为空而返回的零值(false)。当Go程序的其他部分关闭fromServer或fromUserchannel时,for循

go - 共享内存与 Go channel 通信

Go的口号之一是Donotcommunicatebysharingmemory;instead,sharememorybycommunicating.我想知道Go是否允许在同一台机器上运行的两个不同的Go编译二进制文件相互通信(即客户端-服务器),与C++中的boost::interprocess相比,这将有多快?到目前为止,我看到的所有示例都只是说明了同一程序例程之间的通信。非常感谢一个简单的Go示例(具有单独的客户端和服务器代码)! 最佳答案 当我读到这篇文章时,我首先想到的是StacklessPython。Go中的channe

go - 共享内存与 Go channel 通信

Go的口号之一是Donotcommunicatebysharingmemory;instead,sharememorybycommunicating.我想知道Go是否允许在同一台机器上运行的两个不同的Go编译二进制文件相互通信(即客户端-服务器),与C++中的boost::interprocess相比,这将有多快?到目前为止,我看到的所有示例都只是说明了同一程序例程之间的通信。非常感谢一个简单的Go示例(具有单独的客户端和服务器代码)! 最佳答案 当我读到这篇文章时,我首先想到的是StacklessPython。Go中的channe

arrays - 如何分配 channel 数组

如何创建一个channel数组?例如:将以下五行替换为channel数组,大小为5:varc0chanint=make(chanint);varc1chanint=make(chanint);varc2chanint=make(chanint);varc3chanint=make(chanint);varc4chanint=make(chanint); 最佳答案 语句varchans[5]chanint将分配一个大小为5的数组,但所有channel都是nil。一种方法是使用slice文字:varchans=[]chanint{mak

arrays - 如何分配 channel 数组

如何创建一个channel数组?例如:将以下五行替换为channel数组,大小为5:varc0chanint=make(chanint);varc1chanint=make(chanint);varc2chanint=make(chanint);varc3chanint=make(chanint);varc4chanint=make(chanint); 最佳答案 语句varchans[5]chanint将分配一个大小为5的数组,但所有channel都是nil。一种方法是使用slice文字:varchans=[]chanint{mak

go - 从 channel 返回错误

当我在Go中编写一个函数时,它应该返回一个值和一个类似的错误funccreateHashedPassword(passwordstring)string,error{//code}我想在goroutine中执行这个createHashedPassword,我想通过channel传递数据。但我的问题是,我该如何处理这里或goroutine中的错误? 最佳答案 通常将多个输出捆绑到一个结构中,然后通过单个channel将它们一起返回。typeResultstruct{MessagestringErrorerror}ch:=make(ch