我正在运行一个查询,以遍历特定标签后面的所有"In"边,稍后我将对"Out"边执行类似的查询.我希望以树的形式获得它,因为可能有一个具有多条边的顶点要遍历,并且需要在我的客户端中反映这一点,所以我不能在这里只使用ToList().

我目前正在使用Gremlin-Go SDK,但当调用Tree()步骤时,我得到一个反序列化错误.以下是我的客户机代码的一段代码:

    res, err := g.V(id).
        Emit().
        Repeat(__.In(label)).
        Tree().
        Next() // Other terminal steps produce same issue

这会对数据类型0x2b产生反序列化错误,该数据类型为GraphBinary core data type "Tree"

2023/02/28 12:23:05 Error occurred during operation gremlinServerWSProtocol.readLoop(): 'E0408: unknown data type to deserialize 0x2b'
2023/02/28 12:23:05 Read loop error 'E0408: unknown data type to deserialize 0x2b', closing read loop.
2023/02/28 12:23:05 Connection error callback invoked, closing protocol.

Gremlin-Go参考文档似乎没有提到任何关于特定序列化支持的内容.根据gremlin-go README的说法,它支持所有核心GraphBinary数据类型.我在Gremlin控制台中测试了我的查询,以验证查询和服务器: g.V(<ID>).emit().repeat(__.in(<LABEL>)).tree().next().


对于一些额外的背景,我在本地针对gremlin-server:3.5.3进行了开发,以试验最终确定支持AWS海王星的查询的意图.我知道这些不能完全互换,将遵循Neptune-Gremlin reference.最新版本的海王星指定Gremlin的最新受支持版本为3.5.3.

推荐答案

通常,只有Java(和其他基于JVM的客户端)能够反序列化 struct ,如子图或树.这是因为这些是目前唯一具有可用的数据 struct 的本机实现的Gremlin客户端(例如,JVM客户端具有可用的TinkerGraph).

这是TinkerPop社区非常清楚的一个项目,也是值得改进的地方之一.

一种可能的解决办法(不是很好的办法)是使用HTTP端点(以文本形式发送查询),并处理返回的GraphSON(如果获取这种类型的数据 struct 是必不可少的).

Go相关问答推荐

Go 1.22 net/http群组路由

如何复制*C.char?

更改位置级别和时间戳零点Golang

从带有嵌套括号的字符串中提取值

Golang Fiber Render - 将数据发送到多个布局

Go 中如何判断 struct 体是否包含另一个 struct 体?

Golang校验器包:重命名字段错误处理

设置指向空接口的指针

转换朴素递归硬币问题时的记忆错误

为什么 reflect.TypeOf(new(Encoder)).Elem() != reflect.TypeOf(interfaceVariable)?

在 Gorm 的 AfterFind() 钩子中获取智能 Select struct 的值

关系不存在 GORM

如何在 Windows 上使用 cgo 为 386 arch 构建 lib?

K8s 算子读取原始数据

Golang:每个键具有多个值的映射

传递上下文的最佳方式

测试包外文件时的 Golang 测试覆盖率

Golang 'defer' 导致发送(接收)API 响应延迟

Go/Golang:如何从 big.Float 中提取最低有效数字?

如何动态解析 Go Fiber 中的请求正文?