如何在 Golang 中动态映射数据库表



我必须通过Go从MS-SQL数据库创建一个JSON。问题是某些数据库字段是在后端系统(而不是 Go(中动态创建的。

可能有:

type Demotable struct{
Id int
Name string
Adress int
Z_somedynamicfield string
Z_anotherfield int
}

所有以"Z_"为前缀的字段都是动态的,因此结构也可以是:

type Demotable struct{
Id int
Name string
Adress int
Z_completedifferent int
Z_notlikefirst string
Z_evenmorefields string
}

我还有一个帮助表,其中描述了每个"动态字段":

| tableName | fieldName          | fieldType |
+-----------+--------------------+-----------+
| Demotable | Z_somedynamicfield | string    |
+-----------+--------------------+-----------+
| Demotable | Z_anotherfield     | int       |
...

理想情况下,我会使用帮助表中的信息动态"扩展"结构 - 但我不知道这如何或是否可能?

我会首先通过预准备语句查询表的当前表:

SELECT * FROM [DatabaseName].INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = N'MyTable'

将查询结果存储在字符串切片中。执行此操作后,创建一个包含string键和*interface{}值的映射。

 results := make(map[string](*interface{})

在循环访问实际查询的结果时,您最终可以分配上一个查询中的值来映射结果。

Kyle Banks提供了有关从本文的查询结果接收动态结果的精彩解释。

如果出于任何原因您需要实际指定结果的类型,则reflect包将为您的需要自动解析值类型提供很多帮助。

最新更新