草庐IT

database-concurrency

全部标签

concurrency - 通知所有 goroutines

我正在使用Go开发TCP服务器。现在我想通知所有正在与客户对话的goroutines断开连接,转储他们所拥有的并停止。关闭channel是一种通知所有channel的方式。问题是:这是地道的围棋吗?如果我错了;那么我应该怎么做(通知所有goroutines-类似于.NET中的ManualResetEvent)?注意:我是一个Go新手,刚刚学习并开始使用TCPServer,因为我之前用C#编写过它。 最佳答案 是的,关闭channel是Goroutine之间通信的惯用Go方式。您需要在每个goroutine启动时将一个channel传

database - 是否可以在 GAE Golang Blobstore 中存储任意数据?

我正在GoogleAppEngineGo中创建一个大型数据库应用程序。我的大部分数据都很小,因此将它们存储在Datastore中没有问题。但是,我知道我会遇到一些几兆字节大的条目,因此我将不得不使用Blobstore来保存它们。寻找atthereferenceforBlobstore,该服务似乎主要用于上传到该服务的文件。我需要调用哪些函数才能像在Datastore中一样在Blobstore中存储任意数据?我已经可以将数据转换为[]byte并且我不需要在blob中索引任何内容,只需通过ID存储和获取它。 最佳答案 有两种方法可以将文

concurrency - 了解 Rob Pike 的图书焚烧示例

在RobPike的2012年演讲中,ConcurrencyisnotParallelism(it'sbetter),他有一个正在运行的例子,说明一群gophers一起工作来焚烧一堆书。在幻灯片15(video6:58)中,三个地鼠在工作:有人把一堆书装进手推车。将装满的手推车移到焚化炉(然后将空手推车送回)。有人将书从手推车运到焚化炉。关于slide16,四个gophers正在一起解决同一个问题:将一堆书装入手推车(和以前一样)。有人将装满的推车移到焚化炉。将书籍从手推车移入焚化炉(和以前一样)。一个人将空车移回堆中。Pike说这会执行更多的工作,但运行速度会更快。为什么?这似乎是相同

concurrency - 练习 : Web Crawler - concurrency not working

我正在完成golang之旅并进行最后的练习,将网络爬虫更改为并行爬行而不是重复爬行(http://tour.golang.org/#73)。我只更改了抓取功能。varused=make(map[string]bool)funcCrawl(urlstring,depthint,fetcherFetcher){ifdepth为了使其并发,我在调用函数Crawl之前添加了go命令,但程序没有递归调用Crawl函数,而是只找到“http://golang.org/”页面,没有其他页面。为什么在Crawl函数的调用中加入了go命令,程序不运行? 最佳答案

concurrency - Go channel 中发送者的排序

考虑来自http://www.golang-book.com/10/index.htm#section2的乒乓示例.packagemainimport("fmt""time")funcpinger(cchanstring){fori:=0;;i++{c作者写道:"Theprogramwillnowtaketurnsprintingpingandpong."但是,要实现这一点,Go必须确定发送者可以发送到channel中的顺序吗?否则,将无法保证ping会在pong之前发送(即您无法获得两个ping,或连续两个pong)。这是如何工作的? 最佳答案

concurrency - 是否有可能从 Go 中的多个 goroutines 中的一个接收结果?

我最近才了解Google的编程语言Go。我对它提供的并发支持很感兴趣,并着手了解更多相关信息。然而,我去看看Go是如何实现并发的一个特定特性的,到目前为止我还没有看到任何证据表明这个特性存在。这是一个假设情况:假设我们正在编写一个函数来确定特定输入的Foo值。对于任何给定的输入,Foo值在域A或域B中找到(不是在两个域中)。这些领域的搜索技术大不相同,但它们都有一个共同特点,即成功的搜索往往会很快返回,而不成功的搜索必须遍历整个数据集才能穷尽,因此需要很长时间。现在,在其他使用并发的语言(例如Cilk)中,可以对函数Foosearch进行编程,使其生成一个Asearch函数和一个Bse

concurrency - 并发 slice 访问

我正在使用Go进行一些流处理,但在尝试弄清楚如何在没有锁的情况下以“Go方式”执行此操作时遇到了困难。这个人为的例子展示了我面临的问题。我们一次得到一个东西。有一个goroutine将它们缓冲到一个名为things的slice中。当things变满时len(things)==100然后以某种方式处理并重置有n个并发goroutine需要访问things才满从其他goroutines访问“不完整的”things是不可预测的。doSomethingWithPartial和doSomethingWithComplete都不需要改变things代码:varmsync.Mutexvarcount

concurrency - 如何处理 goroutine 中的错误?

我正在尝试同时运行多个任务并返回结果或错误。//datachannelsch:=make(chanint)ch2:=make(chanint)ch2:=make(chanint)//errorchannelserrCh:=make(chanerror)errCh2:=make(chanerror)errCh3:=make(chanerror)//functionsgotaskF(ch,errCh)gotaskF2(ch2,errCh2)gotaskF3(ch3,errCh3)然后我开始检查每个错误。如果有任何错误,我们打印它,否则我们打印每个任务的结果err:=然后如果没有错误我收集通

database - 有数据库的 Authboss

我几周前才开始学习Go,我想尝试为Web服务器实现一种身份验证系统。现在,我找到了authboss这似乎是一个完美的解决方案,除了我不明白如何将它与传统数据库集成。它似乎只是将所有内容都存储在自己的内存中,如果服务器崩溃或需要重新启动,这将是一场噩梦。话虽如此,有没有人有任何想法、想法或建议? 最佳答案 要在数据库后端使用authboss身份验证,您需要编写一个“存储程序”实现。没有太多可用的数据库存储(至少我没能找到它们)。使用数据库后端的身份验证实现示例:http://www.josephspurrier.com/go-web-

string - 在 Go 中处理动态错误(特别是 database/sql 包)

在go中使用database/sql包执行sql.Exec之类的操作将返回动态生成的未引用错误,例如"Error1062:Duplicateentry'192'forkey'id'"问题是它也可以返回错误,例如"Error1146:Table'tbl'doesn'texist"来自对sql.Exec的相同调用在没有的情况下,我如何分辨这两个错误之间的区别?字符串比较,或者错误代码的模式匹配或者这些是该问题的惯用可行解决方案? 最佳答案 database/sql包没有解决这个问题。它是特定于驱动程序的。例如,对于mysql你可以使用: