【问题标题】:Dynamic db models in golanggolang 中的动态数据库模型
【发布时间】:2021-06-16 12:41:36
【问题描述】:

我有一个特定配置的 yaml 文件,go 程序读取该文件以构建结构对象。

结构本身看起来像这样

type YamlConfig struct {
    Attributes map[string]struct {
        Label      string   `yaml:"label"`
        Type       string   `yaml:"type"`
        Presence   bool     `yaml:"presence"`
        Uniqueness bool     `yaml:"uniqueness"`
        Strip      bool     `yaml:"strip"`
        Values     []string `yaml:"values"`
        Default    string   `yaml:"default"`
        Multi      bool     `yaml:"multi"`
        Searchable bool     `yaml:"searchable"`
        Pattern    struct {
            Value   string `yaml:"value"`
            Message string `yaml:"message"`
        } `yaml:"pattern"`
        Length struct {
            Min int `yaml:"min"`
            Max int `yaml:"max"`
        } `yaml:"length"`
    } `yaml:"attributes"`
}

我有一个属性映射,可以是从“名称”到“任何”的任何内容,它应该表示和 db 表列及其类型。

我的问题是 - 我能否以某种方式获取该对象,该对象非常动态并且可能不包含所有属性属性的数据,并以某种方式将其转换为具有 Gorm 或其他东西的可用 ORM 模型?

我应该始终定义模型结构还是可以动态构建结构?

【问题讨论】:

    标签: go go-gorm


    【解决方案1】:

    我认为您已经在使用 yaml.Unmarshal() 来解析您的 yaml 配置,对吧?

    当你将 yaml 解组为一个结构体时,你可以使用空接口而不是完整的 yaml 结构体

    var config map[string]interface{}
    yaml.Unrmarshal(configFile, &config)
    fmt.Println(config["label"])
    

    【讨论】:

    • 是的,这看起来很有趣,但我仍然不确定我是否可以用它创建一个 Gorm 模型。我正在考虑采用这种结构的想法,或者只是简单的 yaml,然后根据属性为 gorm 生成模型。如果不首先生成模型的实际代码,我不确定这是否可以实现。
    猜你喜欢
    • 2016-02-16
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 2019-03-15
    • 1970-01-01
    • 2011-04-11
    • 1970-01-01
    • 2019-07-30
    相关资源
    最近更新 更多