mysql - 如何从 Mysql 填充 Struct 类型映射
问题描述
我是 Golang 的新手。这是我要加载的结构,问题是存在我不知道如何从 Mysql 填充的 map [string] ChannelST
type StreamST struct {
Name string
Channels map[string]ChannelST
}
type ChannelST struct {
Name string
URL string
OnDemand bool
Debug bool
Status int
runLock bool
codecs []av.CodecData
sdp []byte
signals chan int
hlsSegmentBuffer map[int]SegmentOld
hlsSegmentNumber int
clients map[string]ClientST
ack time.Time
解决方案
确切的答案很大程度上取决于您的数据库架构。我将尝试给出一个通用的答案。你可以走两种方式(据我所知):
- 使用在这方面做很多事情的库,比如sqlx或gorm。这些库将查看结构和标签中导出的字段以自动填充它们。
- 使用标准的sql库,自己做所有事情。在这种情况下,您将需要使用该
Rows.Scan
函数自己填充结构。
无论如何,您的StreamST
结构包含一个映射,它是一个集合,所以我假设您要连接两个表。在 GORM 中,您可以指定关系,库会考虑到这一点。虽然我不确定这是否也仅适用于切片或映射,因为 GORM 不知道将结构的哪个字段用作映射的索引。
使用标准库时,返回的行与 SQL 查询的结果完全相同,因此左表的字段将重复,因此您需要编写自己的逻辑来将此字段列表转换为正确的结构。
最后,您有许多自定义类型,例如av.CodecData
. 如果这些对应于单个字段但采用自定义格式,您可以通过让这些结构实现sql.Scanner和driver.Valuer接口来实现自定义编码/解码。
推荐阅读
- html - 使用表单组为 HTML 设置选择值
- python - 运行迁移时出错返回 Database.Cursor.execute(self, query, params) django.db.utils.OperationalError: near ")": 语法错误
- java - Libgdx 将运动图像返回到原始位置
- python - 在日期 odoo 之后从其他字段更新字段
- python - 素数总和
- android - Android MediaPlayer.create 失败
- selenium-webdriver - 使用 selenium 和 c# 从 Combobox 下拉列表中选择值
- python - SQL 游标重构为 Spark 集群上的 Python 状态机
- jquery - 在 ChartJS 中突出显示最后点击的栏
- java - 使用 JCIFS 访问 Windows 共享文件夹