{"id":"c63fdb95-9e19-407a-9bda-1eff70019abb","shortId":"8Fvpw8","kind":"skill","title":"gorm","tagline":"GORM (Go ORM) development assistant. Use when the user needs to: (1) Create GORM models, (2) Define database schemas, (3) Perform CRUD operations, (4) Handle associations and relationships, (5) Write complex queries, (6) Implement migrations, (7) Use hooks and callbacks, (8) Quer","description":"# GORM 开发指南\n\nGORM 是 Go 语言最流行的 ORM 库，提供完整的数据库操作功能。\n\n## ⚠️ 重要说明\n\n**本 skill 专注于 GORM 的传统 API（Traditional API），不使用泛型方式。**\n\n所有示例代码均使用传统的链式调用方式，确保与现有代码和 GORM 插件的完全兼容性。\n\n### 传统 API vs 泛型 API\n\n```go\n// ✅ 使用传统 API（推荐）\nvar user User\ndb.Where(\"name = ?\", \"John\").First(&user)\ndb.Create(&user)\ndb.Model(&user).Update(\"age\", 30)\n\n// ❌ 不使用泛型 API\n// result := gorm.Query[User](db).Where(\"name = ?\", \"John\").First()\n```\n\n## 快速开始\n\n### 安装\n\n```bash\ngo get -u gorm.io/gorm\ngo get -u gorm.io/driver/mysql\ngo get -u gorm.io/driver/postgres\ngo get -u gorm.io/driver/sqlite\n```\n\n### 连接数据库\n\n```go\npackage main\n\nimport (\n    \"gorm.io/driver/mysql\"\n    \"gorm.io/gorm\"\n)\n\nfunc main() {\n    // MySQL\n    dsn := \"user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local\"\n    db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})\n    if err != nil {\n        panic(\"failed to connect database\")\n    }\n\n    // PostgreSQL\n    // dsn := \"host=localhost user=gorm password=gorm dbname=gorm port=9920 sslmode=disable\"\n    // db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{})\n\n    // SQLite\n    // db, err := gorm.Open(sqlite.Open(\"test.db\"), &gorm.Config{})\n}\n```\n\n## 模型定义\n\n### 基础模型\n\n```go\ntype User struct {\n    ID        uint           `gorm:\"primaryKey\"`\n    Name      string         `gorm:\"size:100;not null\"`\n    Email     string         `gorm:\"uniqueIndex;size:100\"`\n    Age       int            `gorm:\"default:0\"`\n    Birthday  *time.Time\n    CreatedAt time.Time\n    UpdatedAt time.Time\n    DeletedAt gorm.DeletedAt `gorm:\"index\"`\n}\n```\n\n### 使用 gorm.Model\n\n```go\ntype User struct {\n    gorm.Model\n    Name  string\n    Email string\n}\n\n// gorm.Model 包含:\n// ID        uint\n// CreatedAt time.Time\n// UpdatedAt time.Time\n// DeletedAt gorm.DeletedAt\n```\n\n### 字段标签\n\n```go\ntype User struct {\n    ID        uint      `gorm:\"primaryKey\"`\n    Name      string    `gorm:\"size:100;not null;index\"`\n    Email     string    `gorm:\"uniqueIndex;size:100\"`\n    Age       int       `gorm:\"default:18\"`\n    Active    bool      `gorm:\"default:true\"`\n    Salary    float64   `gorm:\"type:decimal(10,2)\"`\n    Profile   string    `gorm:\"type:text\"`\n    Extra     string    `gorm:\"-\"` // 忽略该字段\n}\n```\n\n## CRUD 操作\n\n### 创建\n\n```go\n// 创建单条记录\nuser := User{Name: \"John\", Email: \"john@example.com\", Age: 30}\nresult := db.Create(&user)\n// user.ID 返回插入数据的主键\n// result.Error 返回错误\n// result.RowsAffected 返回插入记录的条数\n\n// 批量创建\nusers := []User{\n    {Name: \"John\", Email: \"john@example.com\"},\n    {Name: \"Jane\", Email: \"jane@example.com\"},\n}\ndb.Create(&users)\n\n// 使用 Map 创建\ndb.Model(&User{}).Create(map[string]interface{}{\n    \"Name\": \"John\",\n    \"Age\":  30,\n})\n```\n\n### 查询\n\n```go\n// 获取第一条记录\nvar user User\ndb.First(&user)\n// SELECT * FROM users ORDER BY id LIMIT 1;\n\n// 获取最后一条记录\ndb.Last(&user)\n\n// 根据主键查询\ndb.First(&user, 10)\n// SELECT * FROM users WHERE id = 10;\n\n// 查询所有记录\nvar users []User\ndb.Find(&users)\n\n// 条件查询\ndb.Where(\"name = ?\", \"John\").First(&user)\ndb.Where(\"name = ? AND age >= ?\", \"John\", 20).Find(&users)\ndb.Where(\"name IN ?\", []string{\"John\", \"Jane\"}).Find(&users)\ndb.Where(\"name LIKE ?\", \"%john%\").Find(&users)\n\n// Struct 条件\ndb.Where(&User{Name: \"John\", Age: 20}).First(&user)\n\n// Map 条件\ndb.Where(map[string]interface{}{\"name\": \"John\", \"age\": 20}).Find(&users)\n\n// Not 条件\ndb.Not(\"name = ?\", \"John\").Find(&users)\n\n// Or 条件\ndb.Where(\"name = ?\", \"John\").Or(\"name = ?\", \"Jane\").Find(&users)\n\n// 选择特定字段\ndb.Select(\"name\", \"age\").Find(&users)\n\n// 排序\ndb.Order(\"age desc, name\").Find(&users)\n\n// 限制和偏移\ndb.Limit(10).Offset(5).Find(&users)\n\n// 分组和聚合\ndb.Model(&User{}).Select(\"name, sum(age) as total\").Group(\"name\").Having(\"total > ?\", 100).Find(&results)\n```\n\n### 更新\n\n```go\n// 更新单个字段\ndb.Model(&user).Update(\"name\", \"John Doe\")\n\n// 更新多个字段\ndb.Model(&user).Updates(User{Name: \"John\", Age: 30})\ndb.Model(&user).Updates(map[string]interface{}{\"name\": \"John\", \"age\": 30})\n\n// 更新选定字段\ndb.Model(&user).Select(\"name\").Updates(map[string]interface{}{\"name\": \"John\", \"age\": 30})\n// 只更新 name\n\n// 批量更新\ndb.Model(&User{}).Where(\"active = ?\", true).Update(\"name\", \"hello\")\n\n// 使用表达式更新\ndb.Model(&User{}).Update(\"age\", gorm.Expr(\"age + ?\", 1))\n```\n\n### 删除\n\n```go\n// 删除记录\ndb.Delete(&user)\n// DELETE FROM users WHERE id = 10;\n\n// 根据主键删除\ndb.Delete(&User{}, 10)\ndb.Delete(&User{}, []int{1, 2, 3})\n\n// 批量删除\ndb.Where(\"name = ?\", \"John\").Delete(&User{})\n\n// 软删除（需要 DeletedAt 字段）\ndb.Delete(&user)\n// UPDATE users SET deleted_at = '当前时间' WHERE id = 10;\n\n// 永久删除\ndb.Unscoped().Delete(&user)\n\n// 查询包含软删除的记录\ndb.Unscoped().Where(\"age = ?\", 20).Find(&users)\n```\n\n## 关联关系\n\n### Belongs To\n\n```go\ntype User struct {\n    gorm.Model\n    Name      string\n    CompanyID int\n    Company   Company\n}\n\ntype Company struct {\n    gorm.Model\n    Name string\n}\n\n// 查询时预加载\ndb.Preload(\"Company\").Find(&users)\n```\n\n### Has One\n\n```go\ntype User struct {\n    gorm.Model\n    Name    string\n    Profile Profile\n}\n\ntype Profile struct {\n    gorm.Model\n    UserID uint\n    Bio    string\n}\n\n// 预加载\ndb.Preload(\"Profile\").Find(&users)\n```\n\n### Has Many\n\n```go\ntype User struct {\n    gorm.Model\n    Name   string\n    Orders []Order\n}\n\ntype Order struct {\n    gorm.Model\n    UserID uint\n    Amount float64\n}\n\n// 预加载\ndb.Preload(\"Orders\").Find(&users)\n```\n\n### Many To Many\n\n```go\ntype User struct {\n    gorm.Model\n    Name  string\n    Roles []Role `gorm:\"many2many:user_roles;\"`\n}\n\ntype Role struct {\n    gorm.Model\n    Name  string\n    Users []User `gorm:\"many2many:user_roles;\"`\n}\n\n// 预加载\ndb.Preload(\"Roles\").Find(&users)\n\n// 添加关联\ndb.Model(&user).Association(\"Roles\").Append(&role)\n\n// 删除关联\ndb.Model(&user).Association(\"Roles\").Delete(&role)\n\n// 清空关联\ndb.Model(&user).Association(\"Roles\").Clear()\n```\n\n## 高级查询\n\n### 子查询\n\n```go\ndb.Where(\"amount > (?)\", db.Table(\"orders\").Select(\"AVG(amount)\")).Find(&orders)\n```\n\n### 原生 SQL\n\n```go\n// 原生查询\ndb.Raw(\"SELECT name, age FROM users WHERE name = ?\", \"John\").Scan(&result)\n\n// 执行原生 SQL\ndb.Exec(\"UPDATE users SET age = ? WHERE name = ?\", 30, \"John\")\n```\n\n### 事务\n\n```go\n// 自动事务\ndb.Transaction(func(tx *gorm.DB) error {\n    if err := tx.Create(&user).Error; err != nil {\n        return err\n    }\n    if err := tx.Create(&order).Error; err != nil {\n        return err\n    }\n    return nil\n})\n\n// 手动事务\ntx := db.Begin()\ndefer func() {\n    if r := recover(); r != nil {\n        tx.Rollback()\n    }\n}()\n\nif err := tx.Create(&user).Error; err != nil {\n    tx.Rollback()\n    return err\n}\n\nif err := tx.Create(&order).Error; err != nil {\n    tx.Rollback()\n    return err\n}\n\ntx.Commit()\n```\n\n## Hooks\n\n```go\nfunc (u *User) BeforeCreate(tx *gorm.DB) error {\n    // 创建前执行\n    u.UUID = uuid.New()\n    return nil\n}\n\nfunc (u *User) AfterCreate(tx *gorm.DB) error {\n    // 创建后执行\n    return nil\n}\n\nfunc (u *User) BeforeUpdate(tx *gorm.DB) error {\n    // 更新前执行\n    return nil\n}\n\nfunc (u *User) AfterUpdate(tx *gorm.DB) error {\n    // 更新后执行\n    return nil\n}\n\nfunc (u *User) BeforeDelete(tx *gorm.DB) error {\n    // 删除前执行\n    return nil\n}\n\nfunc (u *User) AfterDelete(tx *gorm.DB) error {\n    // 删除后执行\n    return nil\n}\n\nfunc (u *User) AfterFind(tx *gorm.DB) error {\n    // 查询后执行\n    return nil\n}\n```\n\n## 迁移\n\n```go\n// 自动迁移\ndb.AutoMigrate(&User{}, &Order{}, &Company{})\n\n// 检查表是否存在\ndb.Migrator().HasTable(&User{})\n\n// 创建表\ndb.Migrator().CreateTable(&User{})\n\n// 删除表\ndb.Migrator().DropTable(&User{})\n\n// 重命名表\ndb.Migrator().RenameTable(&User{}, &UserInfo{})\n\n// 添加列\ndb.Migrator().AddColumn(&User{}, \"Age\")\n\n// 删除列\ndb.Migrator().DropColumn(&User{}, \"Age\")\n\n// 修改列\ndb.Migrator().AlterColumn(&User{}, \"Age\")\n\n// 创建索引\ndb.Migrator().CreateIndex(&User{}, \"Email\")\n\n// 删除索引\ndb.Migrator().DropIndex(&User{}, \"Email\")\n```\n\n## 最佳实践\n\n1. **使用连接池**：配置合适的连接池参数\n2. **预加载关联**：避免 N+1 查询问题\n3. **使用事务**：保证数据一致性\n4. **软删除**：使用 DeletedAt 字段\n5. **索引优化**：为常用查询字段添加索引\n6. **批量操作**：使用批量插入/更新提升性能\n7. **错误处理**：始终检查 Error 返回值\n8. **使用 Context**：支持超时和取消操作\n\n## 官方文档参考\n\n详细文档请参考 `references/` 目录下的官方文档。","tags":["gorm","awesome","skills","fanqingxuan","agent-skills","ai-agent","claude-code","claude-skills","codex","coding-assistant","developer-tools","qoder"],"capabilities":["skill","source-fanqingxuan","skill-gorm","topic-agent-skills","topic-ai-agent","topic-claude-code","topic-claude-skills","topic-codex","topic-coding-assistant","topic-developer-tools","topic-qoder","topic-vercel-skills"],"categories":["awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/fanqingxuan/awesome-skills/gorm","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add fanqingxuan/awesome-skills","source_repo":"https://github.com/fanqingxuan/awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.459","qualityRationale":"deterministic score 0.46 from registry signals: · indexed on github topic:agent-skills · 19 github stars · SKILL.md body (7,780 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-23T07:01:11.880Z","embedding":null,"createdAt":"2026-04-18T23:06:26.476Z","updatedAt":"2026-04-23T07:01:11.880Z","lastSeenAt":"2026-04-23T07:01:11.880Z","tsv":"'+1':958 '/dbname':148 '/driver/mysql':115,135 '/driver/postgres':121 '/driver/sqlite':127 '/gorm':109,138 '0':223 '1':13,367,549,568,951 '10':293,374,380,469,560,564,591 '100':210,218,268,277,487 '127.0.0.1':146 '18':282 '2':17,294,569,954 '20':398,422,434,600 '3':21,570,960 '30':90,316,351,507,517,530,765 '3306':147 '4':25,963 '5':30,471,968 '6':34,971 '7':37,975 '8':42,980 '9920':180 'activ':283,537 'addcolumn':927 'aftercr':844 'afterdelet':884 'afterfind':894 'afterupd':864 'age':89,219,278,315,350,396,421,433,457,462,480,506,516,529,546,548,599,748,762,929,934,939 'altercolumn':937 'amount':669,733,738 'api':59,61,68,71,74,92 'append':714 'assist':6 'associ':27,712,719,726 'avg':737 'bash':103 'beforecr':832 'beforedelet':874 'beforeupd':854 'belong':604 'bio':645 'birthday':224 'bool':284 'callback':41 'charset':149 'clear':728 'compani':615,616,618,625,907 'companyid':613 'complex':32 'connect':167 'context':982 'creat':14,344 'createdat':226,249 'createindex':942 'createt':914 'crud':23,304 'databas':19,168 'db':96,155,183,190 'db.automigrate':904 'db.begin':797 'db.create':84,318,337 'db.delete':553,562,565,581 'db.exec':758 'db.find':385 'db.first':358,372 'db.last':369 'db.limit':468 'db.migrator':909,913,917,921,926,931,936,941,946 'db.model':86,342,475,493,500,508,519,534,543,710,717,724 'db.not':439 'db.order':461 'db.preload':624,648,672,705 'db.raw':745 'db.select':455 'db.table':734 'db.transaction':770 'db.unscoped':593,597 'db.where':79,388,393,401,409,417,427,446,572,732 'dbname':177 'decim':292 'default':222,281,286 'defer':798 'defin':18 'delet':555,575,586,594,721 'deletedat':230,253,579,966 'desc':463 'develop':5 'disabl':182 'doe':498 'dropcolumn':932 'dropindex':947 'droptabl':918 'dsn':142,159,170,187 'email':213,243,272,313,331,335,944,949 'err':156,162,184,191,776,780,783,785,789,792,807,811,815,817,821,825 'error':774,779,788,810,820,835,847,857,867,877,887,897,978 'extra':300 'fail':165 'find':399,407,413,435,442,452,458,465,472,488,601,626,650,674,707,739 'first':82,100,391,423 'float64':289,670 'func':139,771,799,829,841,851,861,871,881,891 'get':105,111,117,123 'go':3,48,72,104,110,116,122,129,198,236,256,307,353,491,551,606,630,654,679,731,743,768,828,902 'gorm':1,2,15,44,46,57,65,174,176,178,204,208,215,221,232,262,266,274,280,285,290,297,302,688,700 'gorm.config':160,188,195 'gorm.db':773,834,846,856,866,876,886,896 'gorm.deletedat':231,254 'gorm.expr':547 'gorm.io':108,114,120,126,134,137 'gorm.io/driver/mysql':113,133 'gorm.io/driver/postgres':119 'gorm.io/driver/sqlite':125 'gorm.io/gorm':107,136 'gorm.model':235,240,245,610,620,634,642,658,666,683,695 'gorm.open':157,185,192 'gorm.query':94 'group':483 'handl':26 'hastabl':910 'hello':541 'hook':39,827 'host':171 'id':202,247,260,365,379,559,590 'implement':35 'import':132 'index':233,271 'int':220,279,567,614 'interfac':347,430,513,526 'jane':334,406,451 'jane@example.com':336 'john':81,99,312,330,349,390,397,405,412,420,432,441,448,497,505,515,528,574,753,766 'john@example.com':314,332 'like':411 'limit':366 'loc':153 'local':154 'localhost':172 'main':131,140 'mani':653,676,678 'many2many':689,701 'map':340,345,425,428,511,524 'migrat':36 'model':16 'mysql':141 'mysql.open':158 'n':957 'name':80,98,206,241,264,311,329,333,348,389,394,402,410,419,431,440,447,450,456,464,478,484,496,504,514,522,527,532,540,573,611,621,635,659,684,696,747,752,764 'need':11 'nil':163,781,790,794,804,812,822,840,850,860,870,880,890,900 'null':212,270 'offset':470 'one':629 'oper':24 'order':363,661,662,664,673,735,740,787,819,906 'orm':4,50 'packag':130 'panic':164 'parsetim':151 'password':144,175 'perform':22 'port':179 'postgres.open':186 'postgresql':169 'primarykey':205,263 'profil':295,637,638,640,649 'quer':43 'queri':33 'r':801,803 'recov':802 'refer':986 'relationship':29 'renamet':922 'result':93,317,489,755 'result.error':322 'result.rowsaffected':324 'return':782,791,793,814,824,839,849,859,869,879,889,899 'role':686,687,691,693,703,706,713,715,720,722,727 'salari':288 'scan':754 'schema':20 'select':360,375,477,521,736,746 'set':585,761 'size':209,217,267,276 'skill':55 'skill-gorm' 'source-fanqingxuan' 'sql':742,757 'sqlite':189 'sqlite.open':193 'sslmode':181 'string':207,214,242,244,265,273,296,301,346,404,429,512,525,612,622,636,646,660,685,697 'struct':201,239,259,415,609,619,633,641,657,665,682,694 'sum':479 'tcp':145 'test.db':194 'text':299 'time.time':225,227,229,250,252 'topic-agent-skills' 'topic-ai-agent' 'topic-claude-code' 'topic-claude-skills' 'topic-codex' 'topic-coding-assistant' 'topic-developer-tools' 'topic-qoder' 'topic-vercel-skills' 'total':482,486 'tradit':60 'true':152,287,538 'tx':772,796,833,845,855,865,875,885,895 'tx.commit':826 'tx.create':777,786,808,818 'tx.rollback':805,813,823 'type':199,237,257,291,298,607,617,631,639,655,663,680,692 'u':106,112,118,124,830,842,852,862,872,882,892 'u.uuid':837 'uint':203,248,261,644,668 'uniqueindex':216,275 'updat':88,495,502,510,523,539,545,583,759 'updatedat':228,251 'use':7,38 'user':10,77,78,83,85,87,95,143,173,200,238,258,309,310,319,327,328,338,343,356,357,359,362,370,373,377,383,384,386,392,400,408,414,418,424,436,443,453,459,466,473,476,494,501,503,509,520,535,544,554,557,563,566,576,582,584,595,602,608,627,632,651,656,675,681,690,698,699,702,708,711,718,725,750,760,778,809,831,843,853,863,873,883,893,905,911,915,919,923,928,933,938,943,948 'user.id':320 'userid':643,667 'userinfo':924 'utf8mb4':150 'uuid.new':838 'var':76,355,382 'vs':69 'write':31 '不使用泛型':91 '不使用泛型方式':62 '专注于':56 '为常用查询字段添加索引':970 '事务':767 '传统':67 '使用':234,339,965,981 '使用事务':961 '使用传统':73 '使用批量插入':973 '使用表达式更新':542 '使用连接池':952 '保证数据一致性':962 '修改列':935 '关联关系':603 '分组和聚合':474 '创建':306,341 '创建前执行':836 '创建单条记录':308 '创建后执行':848 '创建索引':940 '创建表':912 '删除':550 '删除关联':716 '删除列':930 '删除前执行':878 '删除后执行':888 '删除索引':945 '删除表':916 '删除记录':552 '包含':246 '原生':741 '原生查询':744 '只更新':531 '基础模型':197 '始终检查':977 '子查询':730 '字段':580,967 '字段标签':255 '安装':102 '官方文档参考':984 '库':51 '开发指南':45 '当前时间':588 '快速开始':101 '忽略该字段':303 '所有示例代码均使用传统的链式调用方式':63 '手动事务':795 '执行原生':756 '批量创建':326 '批量删除':571 '批量操作':972 '批量更新':533 '排序':460 '推荐':75 '提供完整的数据库操作功能':52 '插件的完全兼容性':66 '操作':305 '支持超时和取消操作':983 '是':47 '更新':490 '更新前执行':858 '更新单个字段':492 '更新后执行':868 '更新多个字段':499 '更新提升性能':974 '更新选定字段':518 '最佳实践':950 '本':54 '条件':416,426,438,445 '条件查询':387 '查询':352 '查询包含软删除的记录':596 '查询后执行':898 '查询所有记录':381 '查询时预加载':623 '查询问题':959 '根据主键删除':561 '根据主键查询':371 '检查表是否存在':908 '模型定义':196 '永久删除':592 '泛型':70 '添加关联':709 '添加列':925 '清空关联':723 '的传统':58 '目录下的官方文档':987 '确保与现有代码和':64 '索引优化':969 '自动事务':769 '自动迁移':903 '获取最后一条记录':368 '获取第一条记录':354 '详细文档请参考':985 '语言最流行的':49 '软删除':577,964 '迁移':901 '返回值':979 '返回插入数据的主键':321 '返回插入记录的条数':325 '返回错误':323 '连接数据库':128 '选择特定字段':454 '避免':956 '配置合适的连接池参数':953 '重命名表':920 '重要说明':53 '错误处理':976 '限制和偏移':467 '需要':578 '预加载':647,671,704 '预加载关联':955 '高级查询':729","prices":[{"id":"cad7587c-e405-48c7-be73-4287c4beb181","listingId":"c63fdb95-9e19-407a-9bda-1eff70019abb","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"fanqingxuan","category":"awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T23:06:26.476Z"}],"sources":[{"listingId":"c63fdb95-9e19-407a-9bda-1eff70019abb","source":"github","sourceId":"fanqingxuan/awesome-skills/gorm","sourceUrl":"https://github.com/fanqingxuan/awesome-skills/tree/main/skills/gorm","isPrimary":false,"firstSeenAt":"2026-04-18T23:06:26.476Z","lastSeenAt":"2026-04-23T07:01:11.880Z"}],"details":{"listingId":"c63fdb95-9e19-407a-9bda-1eff70019abb","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"fanqingxuan","slug":"gorm","github":{"repo":"fanqingxuan/awesome-skills","stars":19,"topics":["agent-skills","ai-agent","claude-code","claude-skills","codex","coding-assistant","developer-tools","qoder","vercel-skills"],"license":"mit","html_url":"https://github.com/fanqingxuan/awesome-skills","pushed_at":"2026-04-21T16:00:10Z","description":"热门skills推荐,包括编程以及非编程等各种热门实用的skill","skill_md_sha":"ab679e2952771551bb33058232a3bae107413c1d","skill_md_path":"skills/gorm/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/fanqingxuan/awesome-skills/tree/main/skills/gorm"},"layout":"multi","source":"github","category":"awesome-skills","frontmatter":{"name":"gorm","description":"GORM (Go ORM) development assistant. Use when the user needs to: (1) Create GORM models, (2) Define database schemas, (3) Perform CRUD operations, (4) Handle associations and relationships, (5) Write complex queries, (6) Implement migrations, (7) Use hooks and callbacks, (8) Query data, (9) Insert data, (10) Update data, (11) Delete data, (12) Create tables, (13) Modify tables, or any other GORM development tasks. Triggers on phrases like \"创建 GORM 模型\", \"数据库查询\", \"GORM 关联\", \"GORM 开发\", \"查询数据\", \"写入数据\", \"更新数据\", \"删除数据\", \"创建表\", \"修改表\", \"操作数据库\", \"create GORM model\", \"database query\", \"GORM associations\", \"query data\", \"insert data\", \"update data\", \"delete data\", \"create table\", \"modify table\"."},"skills_sh_url":"https://skills.sh/fanqingxuan/awesome-skills/gorm"},"updatedAt":"2026-04-23T07:01:11.880Z"}}