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

什么app做网站做网站最简单的方法

什么app做网站,做网站最简单的方法,杭州公司注销网站备案,电商首页设计GORM 知识点入门 一、模型定义与约定 模型结构 在 GORM 中,模型通过 Go 结构体进行定义,字段支持多种数据类型,包括基本数据类型、time.Time 以及实现了 Scanner/Valuer 接口的自定义类型。默认情况下,使用 ID 作为主键。表名会…

GORM 知识点入门

一、模型定义与约定

模型结构

在 GORM 中,模型通过 Go 结构体进行定义,字段支持多种数据类型,包括基本数据类型、time.Time 以及实现了 Scanner/Valuer 接口的自定义类型。默认情况下,使用 ID 作为主键。表名会自动转换为结构体名的蛇形复数形式,例如 UserInfo 会映射为 user_infos。字段名则会转换为蛇形命名,比如 CreatedAt 会转为 created_at

标签控制

通过结构体标签,我们可以实现字段级的权限控制,例如设置字段为只读或忽略迁移。此外,还可以指定默认值、创建索引以及设置外键关联等。例如:

type User struct {Name string `gorm:"<-:create"`  // 仅允许创建时写入Age  int    `gorm:"default:18"` // 默认值
}

标签还支持自动时间追踪功能(如 autoCreateTimeautoUpdateTime)以及软删除功能(通过 gorm.DeletedAt 实现)。

二、数据库连接与配置

连接方式

GORM 支持多种数据库,通过 DSN(数据源名称)进行连接。以下是连接 MySQL 的示例:

dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})

在连接时,需注意时区设置(如 loc=Local)和解析时间参数(parseTime=True)。

连接池优化

为了提升性能,我们可以通过 sql.DB 设置连接池参数,包括最大空闲连接数、最大打开连接数以及连接的复用时间等。

三、CRUD 操作

创建(Create)

  • 单条插入db.Create(&user)
  • 批量插入db.CreateInBatches(&users, 100),支持事务和回填主键。
  • 指定字段插入db.Select("Name").Create(&user) 或忽略字段 db.Omit("Age")

查询(Read)

  • 基础查询 :使用 First(按主键查询)、Find(多条件查询)、Where(条件筛选)等方法。
  • 预加载关联数据db.Preload("Comments").Find(&posts),可避免 N + 1 查询问题。
  • 链式操作 :支持 OrderLimitGroup 等,如 db.Where("age > ?", 20).Order("id desc")

更新(Update)

  • 单字段更新db.Model(&user).Update("Name", "NewName")
  • 多字段更新Updates(map[string]interface{}{"Name": "Alice", "Age": 25}),需要注意的是,若字段值为零值,需使用 Select 显式指定。

删除(Delete)

  • 软删除 :默认使用 DeletedAt 字段进行标记,如需物理删除,可通过 Unscoped().Delete() 实现。
  • 条件删除db.Where("age < ?", 18).Delete(&User{})

四、高级功能

事务处理

可以使用 db.Transaction(func(tx *gorm.DB) error { ... }) 来封装事务,它支持嵌套事务以及保存点功能。

钩子(Hooks)

在 CRUD 操作前后,可以触发自定义逻辑。例如,利用 BeforeCreateAfterUpdate 等钩子进行数据校验或记录日志。

关联与预加载

GORM 支持一对一、一对多、多对多等多种关联关系。通过 Preload 预加载关联数据,能够有效减少查询次数。

性能优化

  • 关闭默认事务 :设置 SkipDefaultTransaction: true
  • 预编译语句 :启用 PrepareStmt: true 来缓存 SQL 语句。
  • 调试模式 :使用 db.Debug().Find(&users) 输出实际执行的 SQL 语句,方便进行调试和性能分析。

五、注意事项

零值处理

在使用结构体进行查询时,零值字段(如 0"")会被忽略。若要包含这些条件,需改用 mapSelect 进行显式指定。

错误处理

需要检查 result.Error,部分操作(如 First 查询无结果)可能会返回 ErrRecordNotFound 错误。

指针与值类型

在进行关联查询时,要注意区分指针和值类型,以免出现空指针异常。

扩展资源

  • 插件与扩展 :GORM 支持 Prometheus 监控、多数据库读写分离(Database Resolver)等功能。
  • 迁移工具AutoMigrate 可自动同步模型与表结构,但对于复杂的变更,建议手动处理。

更详细的可以看Gorm中文文档:https://gorm.io/zh_CN/docs/index.html

http://www.dtcms.com/wzjs/816495.html

相关文章:

  • 网站demo怎么做用ai怎么做网站
  • o2o网站建设效果APP网站建设开发企业发展
  • 自己设计一个网页seo网站快速
  • 注册公司网站的费用next wordpress
  • 软件开发招标网站wordpress函数调用
  • 做微电网的公司网站wordpress内容清空
  • 昆山自适应网站建设全国地推公司排名
  • 哈尔滨做网站费用报价网站开发兼容极速字体颜色推荐
  • 南宫建设局网站首页景观设计收费标准
  • 网站建设全程揭秘 课件下载泰兴市城乡建设管理局网站
  • 网站开发技术包括什么广州安全教育平台网
  • 宁阳网站定制网站制作是怎样做的
  • 上海网站制作开发公司app定制开发公司排名
  • 房产网站建设方案的论文业务管理系统
  • 芜湖市建设工程质量监督站官方网站免费做qq互赞网站
  • 企业网站建设背景小程序平台源码
  • 慈溪住房和城乡建设部网站学习网站开发技术
  • 贵州高端网站开发百度商城app
  • 成都都网站建设wordpress免签约
  • 主体负责人和网站负责人不能是同一个人桂林网站网站建设
  • 重庆建网站推广价格微信开放文档
  • 做网站营业范围百度股市行情上证指数
  • 要学好网站开发要会什么自建社区网站
  • 专门做单页的网站成都网站设计开发公司
  • 上海高端模板建站网站做百度地图定位
  • 网站需求表格酒店宣传软文
  • 学做网站要多久多少钱岳阳注册公司
  • 智能网站建设哪家好网页与网站设计工作内容
  • 有什么做论文的网站个人档案网站该怎么做
  • 南京医院网站建设android开发入门教程