登录
首页 >  Golang >  Go问答

获取 Gorm 的字段名称

来源:stackoverflow

时间:2024-02-06 23:12:24 386浏览 收藏

大家好,今天本人给大家带来文章《获取 Gorm 的字段名称》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!

问题内容

我在 gorm 中有以下模型

type Person struct {
    ID        uuid.UUID      `gorm:"type:uuid;default:uuid_generate_v4()"`
    Name      string         `gorm:"not null,type:text"`
    CreatedAt time.Time      `gorm:"autoCreateTime"`
    UpdatedAt time.Time      `gorm:"autoUpdateTime"`
    DeletedAt gorm.DeletedAt `gorm:"index,->"`
}

是否可以获取列名称?我想要 gorm 将生成的列名


正确答案


可能的解决方案

解决方案是从模型中检索(“解析”)架构。
请注意:来自模型,而不是来自“物理”数据库。

参考文献

草稿示例程序

go.mod

module gorm/example

go 1.18

require (
    github.com/google/uuid v1.3.0
    gorm.io/gorm v1.23.8
)

require (
    github.com/jinzhu/inflection v1.0.0 // indirect
    github.com/jinzhu/now v1.1.4 // indirect
)

go.sum

github.com/google/uuid v1.3.0 h1:t6jixgmwxmjes8vusxijk2bxhsn+wx8bzdtaoz5fu7i=
github.com/google/uuid v1.3.0/go.mod h1:tiypze4mgqvfeydbfedmoggpew/lqoeaot+nhxu+yho=
github.com/jinzhu/inflection v1.0.0 h1:k317fqzuhwc8yvsvlfmccub36o/s9mckrdi7qkrkd/e=
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+ufllag+qp1va5pdktldyj+khp5pxuvkryuej+srlc=
github.com/jinzhu/now v1.1.4 h1:thnrby1i5f2dh8bafxqfzxkqqvezxrl2ow1tnx+mlas=
github.com/jinzhu/now v1.1.4/go.mod h1:d3ssvoowx0lcu0ibviawjpolvfi5ujvzz7co71le/z8=
gorm.io/gorm v1.23.8 h1:h8sgj+bidgba1ad1ha9gfcx7h8npu7asldlkx0n2tpe=
gorm.io/gorm v1.23.8/go.mod h1:l2lp/ryatc1ynatjfksbde/o8v9oogiapu2/xritmzk=

程序(main.go

package main

import (
    "fmt"
    "github.com/google/uuid"
    "gorm.io/gorm"
    "gorm.io/gorm/schema"
    "sync"
    "time"
)

type person struct {
    id        uuid.uuid      `gorm:"type:uuid;default:uuid_generate_v4()"`
    name      string         `gorm:"not null,type:text"`
    createdat time.time      `gorm:"autocreatetime"`
    updatedat time.time      `gorm:"autoupdatetime"`
    deletedat gorm.deletedat `gorm:"index,->"`
}

func main() {
    s, err := schema.parse(&person{}, &sync.map{}, schema.namingstrategy{})
    if err != nil {
        panic("failed to parse schema")
    }

    m := make(map[string]string)
    for _, field := range s.fields {
        dbname := field.dbname
        modelname := field.name
        m[modelname] = dbname
    }

    fmt.println("model to schema field name map:", m)
    fmt.println("createdat field is mapped to", m["createdat"], "column")
}

构建

$ go build main.go

运行

$ ./main

输出

model to schema field name map: map[createdat:created_at deletedat:deleted_at id:id name:name updatedat:updated_at]
createdat field is mapped to created_at column

使用如下标签:

type UserInfo struct {
    Uid       int       `json:"uid" gorm:"column:uid" form:"uid"` 
    Uname     string    `json:"uname" gorm:"column:uname" form:"uname"`
}

本篇关于《获取 Gorm 的字段名称》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>