这似乎是一个愚蠢的问题,但是可以在GO中编写一个可以从其他语言调用的库,例如: C ++?
答案 0 :(得分:6)
遗憾的是,不能直接(“可以称为”)。平台的C实现定义了一些问题(对于大部分/全部正式supported platforms):
以上所有内容均适用于'gc'。 “gccgo”在一定程度上放松了。有关此内容的更多信息,请参见C C_Interoperability。
答案 1 :(得分:1)
你最好的选择是JSON-RPC。在找到这个之前,我一直在寻找将遗留Python代码与Go集成的方法,但没有成功。 如果您的数据结构可以转换为JSON,那么您就可以了。 这是一个愚蠢的例子:
转到JSON-RPC服务器
import (
"log"
"net"
"net/rpc"
"net/rpc/jsonrpc"
)
type Experiment int
func (e *Experiment) Test(i *string, reply *string) error {
s := "Hello, " + *i
*reply = s
log.Println(s, reply)
return nil
}
func main() {
exp := new(Experiment)
server := rpc.NewServer()
server.Register(exp)
l, err := net.Listen("tcp", ":1234")
if err != nil {
log.Fatal("listen error:", err)
}
for {
conn, err := l.Accept()
if err != nil {
log.Fatal(err)
}
server.ServeCodec(jsonrpc.NewServerCodec(conn))
}
}
Python客户端
import json
import socket
s = socket.create_connection(("127.0.0.1", 1234))
s.sendall(json.dumps(({"id": 1, "method": "Experiment.Test", "params": ["World"]})))
print s.recv(4096)
响应
{"id":1,"result":"Hello, World","error":null}