下面是一个函数,它启动一个外部进程,将正则表达式与进程的标准输出进行匹配,并返回匹配的内容。
func (c *Colony) startCircuit(peer *string) (string, error) {
var (
err error
cmd *exec.Cmd
anchorChan chan string
)
// ... (omitted for readability)
// get the anchor from standard output
go func() {
defer out.Close()
anchorChan = make(chan string)
for scanner := bufio.NewScanner(out); scanner.Scan(); {
line := scanner.Text()
if anchor := reRootAnchor.FindString(line); anchor != "" {
log.Println("Started circuit server with anchor:", anchor)
anchorChan <- anchor
break
}
}
}()
anchor := <-anchorChan
return anchor, err
}
运行该函数时,我获得以下输出,这表明确实找到了匹配项并(可能)推入anchorChan:
2016/05/22 14:04:36 Started circuit server with anchor: circuit://[::]:36195/20666/Q431cc5fe613aa04b
但是,startCircuit来电者似乎挂起。这是相关的代码:
rootAnchor, err := c.startCircuit(peer)
if err != nil {
return "", err
}
log.Fatal(rootAnchor) // DEBUG
为什么startCircuit无限期挂起而不是返回?
慕的地10843
qq_花开花谢_0
相关分类