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

时间:2018-04-16 21:14:07

标签: go dynamic struct

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

可能有:

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

前缀为“Z_”的所有字段都是动态的,因此struct也可以是:

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       |
...

理想情况下,我会使用帮助程序表中的infos动态“扩展”struct - 但我不知道如何甚至可能这样做?

1 个答案:

答案 0 :(得分:0)

我建议首先通过准备好的声明查询表中的当前表:

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

将查询结果存储在字符串切片中。完成后,创建一个包含string个键和*interface{}值的地图。

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

在迭代实际查询的结果时,您最终可以分配上一个查询的值来映射结果。

Kyle Banks提供了一个很好的解释,可以从this文章的查询结果中接收动态结果。

如果由于任何原因您需要实际指定结果的类型,reflect package将在自动解析您需要的值类型方面提供很多帮助。