我正在寻找一种方法来将类型(也许是 reflection.Type?)保存为自定义结构中的字段。这背后的原因是我将 JSON 数组解码为结构,稍后我将根据这些结构构建 SQL 查询,但 JSON 数组中的整数、 float 和时间戳是相同的,尽管它们在查询数据库时不同。这意味着我需要在查询之前将每个值转换为正确的类型。
我认为答案在 reflect 包的某个地方,但我还没有弄清楚如何使用它。
我希望的是这样的:
type Column struct {
name string
dataType type
}
someColumn := Column {name: "somecol", dataType: int}
convertedVal := SomeConversionFunc("5", someColumn.dataType)
或者,这种事情也可以工作:
type Column struct {
name string
dataType func()
}
someColumn := Column {name: "somecol", dataType: ConvertToInt}
convertedVal := someColumn.dataType("5")
有什么想法吗?
最佳答案
我想你走在正确的轨道上。在您的 Column
结构中,您正在寻找 reflect.Type
。您将通过 import "reflect"
获得。
如果您的列结构包含类型名称和值(作为原始字符串),您应该能够编写方法来切换类型并为每种情况生成正确类型的值。此处开关的简要引用; https://golang.org/doc/effective_go.html#switch
type Column struct {
Name string
DataType reflect.Type
TypedValue interface{}
StringValue string
}
因为你说“但是整数、 float 和时间戳在 JSON 数组中是相同的”我假设你的 json 中的所有值在技术上都是字符串(意味着它们都被引用)。您可能不需要所有这些字段,但想法是将类型信息与属性名称和原始值相结合。如果您使用 interface{}
类型的字段,您可以为其分配任何内容,以便您可以保存原始 json 数据(名称和值)以及类型信息和合理的 Go 类型中的值在这个结构的一个实例中很容易。
关于reflection - 在 Golang 结构字段中保存类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31705784/