当前位置: 首页 > news >正文

自己做网站 发布视频教程临沂网站建设设计公司

自己做网站 发布视频教程,临沂网站建设设计公司,做网站做,网站建设600分站优缺点新版 GORM(v2 及以上)的自动字段映射遵循一套清晰的规则,主要围绕结构体字段名到数据库列名的转换,以及特殊字段的默认处理,具体规则如下: 1. 命名转换规则(核心) GORM 会将结构体的…

新版 GORM(v2 及以上)的自动字段映射遵循一套清晰的规则,主要围绕结构体字段名到数据库列名的转换,以及特殊字段的默认处理,具体规则如下:

1. 命名转换规则(核心)

GORM 会将结构体的驼峰式命名(CamelCase) 自动转换为数据库的蛇形命名(snake_case),这是最常用的映射规则。

  • 转换逻辑:在字段名的大写字母前添加下划线,并将所有字母转为小写。
  • 示例:
    • 结构体字段 StudentId → 数据库列 student_id
    • 结构体字段 ScoreValue → 数据库列 score_value
    • 结构体字段 CreatedAt → 数据库列 created_at
    • 结构体字段 ID → 数据库列 id(特殊处理:连续大写会被合并转换)

2. 特殊字段的默认映射

GORM 对一些特定名称的结构体字段有内置映射规则,无需额外配置:

  • ID:默认作为主键(primaryKey),映射到数据库列 id
  • CreatedAt:自动映射到 created_at 列,GORM 会在插入记录时自动填充当前时间。
  • UpdatedAt:自动映射到 updated_at 列,GORM 会在更新记录时自动更新为当前时间。
  • DeletedAt:如果结构体包含该字段,GORM 会启用“软删除”功能,映射到 deleted_at 列(未删除时为 NULL,删除时填充时间)。

3. 自定义映射(覆盖默认规则)

如果需要自定义列名(不遵循驼峰转蛇形),可以通过 gorm:"column:自定义列名" 标签显式指定,覆盖默认规则。
示例:

type Score struct {Id         uint64    `gorm:"primaryKey" json:"id"`  // 默认映射为 idStudentId  uint64    `gorm:"column:stu_id" json:"student_id"`  // 自定义为 stu_idSubject    string    `gorm:"column:course_name" json:"subject"`  // 自定义为 course_name// ...
}

4. 忽略字段

如果某些结构体字段不需要映射到数据库列,可以通过 gorm:"-" 标签排除:

type Score struct {// ...TempData string `gorm:"-" json:"temp_data"`  // 不会生成数据库列
}

5. 自定义映射的核心方式:配置 NamingStrategy

新版 GORM 支持自定义自动映射规则,可以通过配置 NamingStrategy 来修改默认的字段名、表名映射逻辑,满足特定的命名规范需求。

GORM 提供了 gorm.NamingStrategy 结构体,允许你自定义:

  • 表名映射规则(结构体名 → 表名)
  • 字段名映射规则(结构体字段名 → 数据库列名)
  • 联表外键命名规则
  • 索引命名规则

通过在初始化 GORM 时配置 NamingStrategy 即可生效。

示例:自定义字段名映射规则

默认规则是「驼峰转蛇形」,如果需要修改(例如改为全大写、添加前缀等),可以自定义 Column 函数:

import ("gorm.io/driver/sqlite""gorm.io/gorm""strings"
)// 自定义命名策略
namingStrategy := gorm.NamingStrategy{// 自定义字段名映射:将驼峰转为全大写(而非蛇形)Column: func(column string) string {// 示例:StudentId → STUDENTIDreturn strings.ToUpper(column)},// 可选:自定义表名映射(结构体名 → 表名)Table: func(table string) string {// 示例:在表名前加前缀 "t_"return "t_" + table},
}// 初始化 GORM 时应用命名策略
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{NamingStrategy: namingStrategy,
})

上述配置后:

  • 结构体字段 StudentId 会映射为数据库列 STUDENTID(而非默认的 student_id
  • 结构体 Score 会映射为表 t_score(而非默认的 scores

更复杂的自定义示例(保持部分默认逻辑)

如果只想在默认规则基础上微调(例如给所有字段名加前缀),可以结合默认转换逻辑:

import ("gorm.io/gorm/schema""strings"
)namingStrategy := gorm.NamingStrategy{Column: func(column string) string {// 先使用默认的驼峰转蛇形,再添加前缀 "col_"defaultColumn := schema.NamingStrategy{}.Column(column) // 调用默认转换return "col_" + defaultColumn},
}

效果:

  • 结构体字段 ScoreValue → 默认转换为 score_value → 最终映射为 col_score_value

注意事项

  1. 自定义规则全局生效,会影响所有结构体的映射。
  2. 若个别字段需要特殊处理,可以用 gorm:"column:xxx" 标签单独指定,优先级高于全局规则。
  3. 表名默认会在结构体名基础上做「驼峰转蛇形 + 复数化」(如 Userusers),可通过 SingularTable: true 禁用复数化:
    namingStrategy := gorm.NamingStrategy{SingularTable: true, // 表名不加复数后缀(User → user)
    }
    
http://www.dtcms.com/a/489711.html

相关文章:

  • 网站建设技术招聘杭州百度首页优化
  • 网站建设论证方案手机百度建设网站
  • 阿里网站怎么做厦门物流网站建设
  • 怎么做网站主kali做钓鱼网站
  • 设计网站私单价格专业网站建设服务公司哪家好
  • seo 网站描述长度WordPress搬家emlog
  • 上海企业建设网站价格定制衣服的app叫什么
  • 企业网站建设费用的预算万能影视免费观看app
  • 扬州公司做网站photoshop官网
  • 帮忙做简历的网站做 爱 网站小视频下载
  • 网站后台管理系统怎么弄为公司建立网站
  • 免费 网站 cms厦门做企业网站比较好的公司
  • 发布企业信息的网站企业网站营销优缺点
  • 有哪些可以免费推广的网站电脑怎么做最新系统下载网站
  • 建网站是什么专业类别嘉兴网站关键词排名
  • 白城市住房建设局网站页面模板图片大小
  • 戴尔官方网站建设启示上海网站建设乐云seo模板中心
  • 网站发帖功能怎么做网站开发语言识别
  • 青海高端网站建设多少钱aso优化排名推广
  • 两学一做考试网站农业企业网站模板
  • 网站开发商品管理表字段网址导航网站简单制作
  • 宿州市埇桥区建设局网站租车网站模版
  • 安顺网站开发公司徐州信息网最新消息
  • 网站网页怎么压缩广州自助公司建网站企业
  • 求个没封的w站2021不用下载wordpress出现百度抓取404页面
  • 网站3网合一是怎么做的化妆品网站建设策划方案
  • 教育系统网站cms怎么联系创意设计网站
  • 秦皇岛建网站商标注册查询网官网查询
  • 什么做网站做个多少钱啊专做定制的网站
  • 济南网站推广徽hyhyk1wordpress页面设置全屏