问题的具体描述
你好,我用go客户端的meta thrift接口去获取nebula某个space的信息,调用过程中报错,报错信息为“err in read *meta.GetSpaceReq read error: Expected ‘{’ or null, but found ‘d’”,看错误信息应该是接口传参的格式不对,请问正确的调用姿势是怎样的呢?
我的demo代码如下:
package main
import (
"fmt"
"time"
"github.com/facebook/fbthrift/thrift/lib/go/thrift"
meta "github.com/vesoft-inc/nebula-go/v2/nebula/meta"
)
func main() {
timeout := 10000 * time.Second
ip := "localhost"
port := 36539
newAdd := fmt.Sprintf("%s:%d", ip, port)
timeoutOption := thrift.SocketTimeout(timeout)
bufferSize := 128 << 10
addressOption := thrift.SocketAddr(newAdd)
sock, err := thrift.NewSocket(timeoutOption, addressOption)
if err != nil {
fmt.Println(fmt.Errorf("Failed to create a net.Conn-backed Transport,: %s", err.Error()))
}
transport := thrift.NewBufferedTransport(sock, bufferSize)
pf := thrift.NewBinaryProtocolFactoryDefault()
conn := meta.NewMetaServiceClientFactory(transport, pf)
if err = conn.Transport.Open(); err != nil {
fmt.Println(fmt.Errorf("Failed to open transport, error: %s", err.Error()))
}
if conn.Transport.IsOpen() == false {
fmt.Println(fmt.Errorf("Transport is off"))
}
mbTrans := thrift.NewMemoryBufferLen(100)
defer mbTrans.Close()
// data_graph 为待查询的space name
_, err = mbTrans.WriteString("data_graph")
if err != nil {
fmt.Println("err in mbTrans")
}
factory := thrift.NewSimpleJSONProtocolFactory()
jsProt := factory.GetProtocol(mbTrans)
argvalue := meta.NewGetSpaceReq()
err = argvalue.Read(jsProt)
if err != nil {
fmt.Println("err in read", err)
return
}
test, err := conn.GetSpace(argvalue)
fmt.Println(test, err)
test1, err := conn.ListSpaces(&meta.ListSpacesReq{})
fmt.Println(test1, err)
}
*meta.GetSpaceResp error reading struct: *meta.SpaceItem error reading struct: *meta.SpaceDesc error reading struct: unable to skip over unknown type id 1