【问题标题】:How to make nodejs to talk with golang如何让nodejs与golang对话
【发布时间】:2015-09-06 05:45:38
【问题描述】:

我正在 node.js 和 golang 中创建一个 Web 应用程序。我需要将 nodejs 与 golang 代码连接起来,该代码与 mongodb 对话并将数据返回给节点程序。有什么办法可以连接吗?我尝试使用 gonode API。这是我使用 gonode API 的代码。

我的 node.js 文件包含以下代码:

var Go = require('gonode').Go;
var options = {
path : 'gofile.go',
initAtOnce : true,
}

var go = new Go(options,function(err){
if(err) throw err;

go.execute({commandText: 'Hello world from gonode!'}, function(result, response) {
        if(result.ok) {
            console.log('Go responded: ' + response.responseText);
        }
});

go.close();
});     `

这是我的 gofile.go 文件中的代码:

package main

import(
    gonode "github.com/jgranstrom/gonodepkg"
    json "github.com/jgranstrom/go-simplejson"
)

func main(){
    gonode.Start(process)
}

func process(cmd *json.Json) (response *json.Json) {    
    response, m := json.MakeMap()

    if(cmd.Get("commandText").MustString() == "Hello") {
        m["responseText"] = "Well hello there!"
    } else {
        m["responseText"] = "What?"
    }

    return
}

这是在终端中作为节点 node.js 运行时出现的错误

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: write EPIPE
    at errnoException (net.js:905:11)
    at Object.afterWrite (net.js:721:19)

【问题讨论】:

    标签: javascript node.js mongodb go


    【解决方案1】:

    Golang 从 1.5 开始,您可以构建 go 到共享对象二进制文件 (*.so)。这允许您连接您的 go 编译库以供 nodejs、python、ruby、java 等调用。

    这是一个您可以参考的指南:https://medium.com/learning-the-go-programming-language/calling-go-functions-from-other-languages-4c7d8bcc69bf

    【讨论】:

      【解决方案2】:

      感谢您的回复。我有一个解决方案。我做了2个不同的服务器。一个用于 NodeJS,另一个用于 Golang。我在 Node 服务器中调用 golang uri 并从 golang 服务器获取数据。

      【讨论】:

        【解决方案3】:

        基于对 gonode 源代码的草书检查,该模块似乎将 go 代码作为子进程生成并通过 stdin/-out 进行通信。 EPIPE错误意味着另一端关闭了流。基于此,可能是您的 go 进程过早退出。

        您可以尝试通过修改 gonode/lib/command.js 中的 Command.prototype.execute 以打印出发送到 go 进程的 JSON 来调试问题。然后你可以直接运行 go 程序并通过 stdin 给它相同的输入来调试它。

        【讨论】:

        • 此外,go 代码示例的工作方式似乎与您的代码不同。在函数的开头,它调用 response = make(gonode.CommandData),在 if 语句中,响应被分配如下:response["text"] = "What?"。对 go 不太了解,但似乎您的变量 m 并没有真正与任何东西相关联。 npmjs.com/package/gonode
        猜你喜欢
        • 2016-11-10
        • 2010-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多