[英]Making a library usable from other languages in GO
這似乎是一個愚蠢的問題,但是是否可以用其他語言(例如C ++)調用的GO語言編寫一個庫?
不幸的是,這不可能直接( “可以被稱為” )。 平台的C實現定義了一些問題(對於大多數/所有官方支持的平台 ):
以上所有都適用於'gc'。 在“ gccgo”中也是如此。 有關更多信息,請參見C C_Interoperability 。
最好的選擇是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}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.