mysql - 从 sphinx db 到有点复杂的 golang 结构的最佳实践

标签 mysql json go sphinx sqlx

我正在尝试通过 MySQL 将 sphinx 查询转换为 golang 结构,但遇到了困难。看起来这应该是一种常见的问题,但到目前为止,我一直坚持将其转换为 map 或自己解析输出。具体来说,我在 sphinx 中有一个模式,看起来像 {Source: {ID:string, subId:string, Campaigns:[]{CampaignID:string, Status:string}}}

我试过使用简单的 rows.scan,但这并不能帮助我解析重复字段,我只是将其作为未解析的字符串获取。在 sphinx 中, key 不在引号中,因此 JSON.unmarshal 似乎根本没有帮助。并使用 sqlx,我尝试构建以下结构

type CampaignStatus struct {
    CampaignId string
    Status string
}
type Source struct {
    Id               string
    SubId    string
    StatusByCampaign []CampaignStatus
}
type Status struct {
    Source
}

并将 Status 结构传递给 Row.ScanStruct(),然后我返回“缺少目标名称源”错误,或者如果我在 Status 中命名源成员,我得到“sql:列索引 0 上的扫描错误:不支持的扫描,将 driver.Value 类型 []uint8 存储到类型 *v1.Source 中”。完全披露,sphinx 模式还有一些其他列作为 StatusByCampaign 的对等列,它们紧随其后,在我的用例中我不关心它们。

这似乎是以前必须遇到的事情,但我似乎无法在编写自己的解析器之外找到解决方案,我不愿意这样做。

最佳答案

我发现我正在使用的遗留系统正在使用一个名为 ServiceStack 的 ASP.Net 库来序列化/反序列化我的 sphinx 数据库,并且它正在使用它自己的自定义 JSV 格式,ServiceStack 的作者说这是一种优化JSON 和 CSV 的混合,但据我所知还没有在其他任何地方采用。

所以看起来我要么用 Go 重写那个库,要么更可能更改索引算法以使用 JSON。

关于mysql - 从 sphinx db 到有点复杂的 golang 结构的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43284894/

相关文章:

javascript - 动态添加 Tiles 到 TileContainer

Jquery - 将 Ajax jSON 响应存储为变量

Goroutine实现疑惑

mysql - 如何在 Mac 上同时使用两个不同的登录用户运行 MAMP?

mysql - MySQL 中的关联嵌套查询

php - 如果表时间戳已更新,如何仅选择行

php - 查找与 2 个字符串最接近的百分比匹配,并返回下一个最接近的百分比

json - 使用 bitly 的 go-simplejson 时,在 simplejson.Json 文字中显示未导出字段 'data' 的隐式分配

go - 使用其他文件的功能是其他目录Golang

pointers - 满足接口(interface)的 Go 结构方法类型