为什么我的函数没有返回?

页:

下面是一个函数,该函数启动外部进程,将正则表达式与该进程的标准输出进行匹配,然后返回匹配的内容。

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无限期悬挂而不是返回?

T.奴隶制:

问题实际上很简单。提示:以下代码以死锁结尾

package main

import "fmt"

func main() {
    var c chan string

    go func() {
        c = make(chan string)
        c <- "42"
    }()

    str := <-c
    fmt.Println(str)
}

从那里开始,问题变得微不足道了。启动goroutine时未初始化您的频道。这两个goroutine进行了比赛,显然go不能决定哪个优先。

因此,您的答案是:make(chan ...)在goroutine启动之前调用,它应该可以解决您的问题。有效的例子就是一个很好的例子

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我的时间没有按预期返回?

为什么“绑定”的返回函数没有“原型”属性?

为什么我的Jsoup代码没有返回正确的元素?

为什么我的代码没有返回斜边的值?

为什么我的代码没有返回原始消息?

TimeZoneInfo SupportsDaylightSavingTime没有返回我期望的结果,为什么?

为什么在我的SetInterval中没有调用我的函数?

为什么我为我提供的函数没有类型?

为什么日期函数没有返回我预期的输出?

为什么我的程序没有返回正确的文件信息?

为什么这个函数似乎没有返回任何值

为什么我的函数没有被调用?

为什么没有从函数返回值?

为什么我的sqlite选择没有返回结果?

为什么我的ASP函数没有返回A Href内部的链接?

R:为什么我没有获得按预期返回向量的函数?

为什么这个匿名函数没有返回?

为什么我的 Promise 没有返回任何值?

为什么我的 map() 调用没有返回预期的结果?

为什么我的 axios 调用没有返回响应?

为什么这个阶乘函数没有返回?

为什么我在 CodeIgniter 函数中的查询没有返回任何内容?

为什么我的函数没有返回正确的值

为什么我的函数没有在几秒钟内返回正确的值?

检查图形是否是二部图。为什么我的函数没有返回?

为什么我的递归调用中的返回函数没有被执行?

为什么我的函数没有返回正确的值键?

我的函数没有返回变量,我不知道为什么

为什么这个函数没有返回值?