草庐IT

mach_init_routine

全部标签

go - 所有 go routines 都睡着了 - 死锁

我不明白为什么这段代码会出现死锁。我已经尝试了几种不同的方法来阻止死锁(使用WorkGroup的几个不同版本)。这是我在Go的第一天,到目前为止,我对相当简单和直接的操作的复杂性感到非常失望。我觉得我遗漏了一些大而明显的东西,但我在这方面找到的所有文档似乎与对我来说非常基本的操作模式截然不同。所有文档都使用channel的原始类型(int、字符串)而不是更复杂的类型,所有这些都具有非常基本的for循环,或者它们位于范围的另一端,其中函数是相当复杂的编排。我想我真的在寻找goroutines的“这通常是如何完成的”的中间示例。packagemainimport"fmt"//import"

bash - 启动自定义 init.d 脚本会导致在本地主机上找不到 404 页面

我有一个用Golang编写的可执行服务器文件,它由自定义脚本文件运行,位于我的RaspberryPi3B上的/etc/init.d/目录中。服务器启动但不显示我用HTML制作的网站。该网站位于与我的服务器可执行文件相同目录中的“静态”文件夹中。我使用此命令将server.go构建为可执行文件。gobuildserver.go注意如果我通过双击手动启动服务器,网站工作正常(我的服务器显示“static”文件夹)。我的静态文件夹由html、javascript和css文件组成。我认为问题是当我通过脚本启动服务器时,服务器找不到静态文件夹(显示:404页面未找到)。我还希望在RPi启动时启动

来自 go 容器的 Docker 日志(log 和 fmt)在 init 后停止

我正在开发一个由许多go容器组成的应用程序。我用dockercompose管理它们。最近我一直无法从中获取日志。当我运行“dockerlogs[container-name]”时,我只会看到在init期间为我的应用程序中的包创建的日志,以及在服务开始监听之前的main期间创建的日志。对log.Println或fmt.Println的后续调用不会出现在“dockerlogs”的输出中。你知道会发生什么吗? 最佳答案 您可能想将日志写入/dev/stdout或者简单地使用log.SetOutput(os.Stdout)来自log包裹

go - 在 Go Routines 中迭代映射?

我在前一段时间编写的一些旧代码上看到一些“fatalerror:并发map迭代和map写入”。我一直在尝试诊断问题,但遇到了类似于下面playground链接的代码块。在我看来迭代返回的映射(通过引用传递)是错误的,即使它是在带锁的函数中返回的。我正在寻找关于为什么这似乎没有引发上述错误的解释。我知道现在有RWMutex和同步映射,但这段代码是前一段时间写的,我正在寻找功能的解释而不是改进。https://play.golang.org/p/_RY-QAyGE2W我假设上面的代码会抛出“fatalerror:并发map迭代和map写入”,但它似乎没有任何问题。

go - 尝试使用 go routines 时无法抓取数据

我正在尝试为我正在使用BFS的给定词抓取相关词,从给定词开始并在dictionary.com上搜索每个相关词我已经在没有并发的情况下尝试过这段代码,它工作得很好,但需要很多时间,因此尝试使用goroutines但我的代码在第一次迭代后卡住了。第一级BFS工作正常,但在第二级它挂起!packagemainimport("fmt""github.com/gocolly/colly""sync")varwgsync.WaitGroupfuncbuildURL(wordstring)string{return"https://www.dictionary.com/browse/"+string

go - 表示 init 的函数变量

在Go中,您可以在给定的包中定义多个init函数,所有这些函数都将在执行之前以未指定的顺序运行。具有多个此类函数的一个后果是无法在正常代码中调用或识别它们。例如,以下将不会编译:funcmain(){fmt.Println(init)}funcinit(){}(参见here的围棋Playground示例)我的问题是-能够拥有多个init函数有什么好处,如果没有多个init函数,我们是否能够引用或调用init函数? 最佳答案 能够拥有多个init函数的优点是IMO主要是它提高了局部的可读性:你可以在被初始化的东西旁边编写初始化函数,而

go - 有条件的 Go Routine/Channel

我想让统计例程有条件地运行,这样它只在某些情况下运行,否则它会浪费一半的时间。现在我有一个例程作为生产者通过缓冲channel提供两个消费者例程。有没有办法让统计例程是有条件的,或者我应该遵循更好的模式?在此先感谢您提供的所有帮助!funcmain(){options()goproduce(readCSV(loc))goprocess()gostatistics()//onlyonflag 最佳答案 将此设置为条件并没有错:varstatschan[]string//Don'tinitializestats.funcmain(){o

mysql - global var out out init.go in revel

(编辑以修复大写和添加上下文)在revel的init.go中,我有一个全局变量:DB。packageappimport("database/sql""fmt"_"github.com/go-sql-driver/mysql""github.com/revel/revel")varDB*sql.DBfuncInitDB(){connstring:=fmt.Sprintf("revel:revel@tcp(localhost:3336)/revel")varerrerrorDB,err=sql.Open("mysql",connstring)iferr!=nil{revel.INFO.Pr

go - rpc Call 方法是否在与服务器相同的 go routine 中运行?

我的服务器:func(t*Arith)Multiply(args*Args,reply*int)error{*reply=args.A*args.Breturnnil}funcmain(){arith:=new(Arith)rpc.Register(arith)rpc.HandleHTTP()l,e:=net.Listen("tcp",":1234")ife!=nil{log.Fatal("listenerror:",e)}gohttp.Serve(l,nil)}客户:client.Call("Arith.Multiply",args,&reply)我认为Multiply在另一个gor

go - 如何使用 go routines 和 term ui 退出我的 go 代码

我最近开始学习围棋,所有功能给我留下了深刻的印象。我一直在玩goroutines和term-ui并面临一些麻烦。我试图在运行后从控制台退出此代码,但它只是没有响应。如果我在没有go-routine的情况下运行它,它会响应我的q按键事件。感谢任何帮助。我的代码packagemainimport("fmt""github.com/gizak/termui""time""strconv")funcgetData(chchanstring){i:=0for{ch 最佳答案 这可能是您正在寻找的答案。首先,您没有使用termui正确。你需要称