{"id":20554898,"url":"https://github.com/real-web-world/go-api","last_synced_at":"2026-04-17T18:02:56.809Z","repository":{"id":106299675,"uuid":"340240486","full_name":"real-web-world/go-api","owner":"real-web-world","description":"【完成度 60%】gin+gorm api项目 快速curd框架 自动生成代码","archived":false,"fork":false,"pushed_at":"2021-02-22T07:25:59.000Z","size":100,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-12-06T20:54:19.139Z","etag":null,"topics":["api","curd","fastcurd","gin","golang","gorm"],"latest_commit_sha":null,"homepage":"https://blog.buffge.com/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/real-web-world.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-02-19T02:49:02.000Z","updated_at":"2024-06-07T02:17:17.000Z","dependencies_parsed_at":null,"dependency_job_id":"5568a15d-119c-4dd7-8ee0-a8566a19811c","html_url":"https://github.com/real-web-world/go-api","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/real-web-world/go-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/real-web-world%2Fgo-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/real-web-world%2Fgo-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/real-web-world%2Fgo-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/real-web-world%2Fgo-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/real-web-world","download_url":"https://codeload.github.com/real-web-world/go-api/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/real-web-world%2Fgo-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31939788,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-17T17:29:20.459Z","status":"ssl_error","status_checked_at":"2026-04-17T17:28:47.801Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","curd","fastcurd","gin","golang","gorm"],"created_at":"2024-11-16T03:14:18.681Z","updated_at":"2026-04-17T18:02:56.782Z","avatar_url":"https://github.com/real-web-world.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# go api project\n\n基于gin+gorm的快速curd框架\n\n[网站](https://blog.buffge.com)\n\n## 功能\n\n- fastcurd\n- logger\n- 数据库自动迁移\n- docker-compose 部署\n- sentry 错误收集\n- prometheus 指标收集\n- grafana 系统指标可视化\n- 验证器多语言\n- 权限管理\n- json api\n- 调试模式 返回sql详请\n- go linter\n- swagger 文档\n- 环境变量载入配置\n- 记录请求信息,根据reqID记录所有信息\n- Jenkins 自动构建部署\n- 记录每个请求的sql信息,请求完毕自动写入文件\n- 验证码\n- oss上传文件\n- redis 缓存\n- 封装gin 简单易用\n\n## 中间件\n\n- Token Auth\n- Cache\n- 跨域\n- http trace 保存 req resp\n- recover\n\n## 部署流程\n\n```shell\n\n```\n\n[comment]: \u003c\u003e (## Todo)\n\n## 计划\n- 调整部分slice默认容量 把之前的make(xx,0,1)改掉\n- 更新关联项 使用批量insert update 见article update picIDList tagIDList\n- app,string,byte 等常用碎片 对象池，\n- react seo\n- 根据model 自动生成前端ts文件\n- firebase第三方登录\n- ws聊天室\n- 谷歌人机验证\n- 发文章自动提交 百度 谷歌\n\n### 更新优先级\n\n- 写出安全的可用代码\n- 优化速度\n- 优化sql  \n- 优化内存\n- 优化代码数量\n\n## fastcurd简介\n\n模型：\n\n每个模型都有 id，ctime（创建时间），utime（更新时间），dtime（删除时间） 4个字段\n\n请求均使用post方法，每个接口模型均有5个常用接口\n请求路径： /model/operation\n\n- add 添加一条记录\n- edit 编辑一条记录\n- detail 获取一条记录\n- list 获取一组记录\n- del 软删除一组记录\n\n其他定制接口均需要自己编写，若常用接口内有非登录权限问题（如管理员与其他用户操作不同）\n则需要重新编写\n安全性：\n在路由定义中加入授权中间件 比如user模型 未登录5个接口都不能访问，普通用户只能访问detail接口\n管理员可以访问所有。\n返回值：\n\n```\n// 通用返回json\n// 所有的接口均返回此对象\ntype RetJSON struct {\n    Code  int            `json:\"code\" example:\"0\"`\n    Data  interface{}    `json:\"data,omitempty\"`\n    Msg   string         `json:\"msg,omitempty\" example:\"提示信息\"`\n    Count *int           `json:\"count,omitempty\"`\n    Page  int            `json:\"page,omitempty\"`\n    Limit int            `json:\"limit,omitempty\"`\n    Extra *RespJsonExtra `json:\"extra,omitempty\"`\n}\n\ntype RespJsonExtra struct {\n    ReqID    string      `json:\"requestID\"`\n    SQLs     interface{} `json:\"sqls,omitempty\"`\n    ProcTime string      `json:\"procTime\" example:\"0.2s\"`\n    TempData interface{} `json:\"tempData,omitempty\"`\n}\n```\n\n### add\n\n请求参数 AddData 一般为模型中的字段，如有关联 如预览图列表 则有 profilePicIDList字段\n\n### edit\n\n请求参数 EditData 一般为 id + AddData 并将AddData必填字段设置为非必填\n\n### detail\n\n请求参数 id+scene 根据不同scene返回不同json 不传则返回 defaultScene，\n\nadmin scene 需要admin权限 如 请求用户详情 default scene返回信息较多，\n\nprofile scene 只返回id 昵称 头像 介绍4个字段\n\n### list\n\n请求参数 \n- page: 页码\n- limit： 每页数量 \n- filter：查询条件（db字段）\n- order：排序条件（db字段）\n- extra： 其他参数 定制化\n```\nListData struct {\n    Page   int                    `json:\"page\" binding:\"omitempty,required,min=0\"`\n    Limit  int                    `json:\"limit\" binding:\"omitempty,required,min=0,max=50\"`\n    Filter Filter                 `json:\"filter\" binding:\"\"`\n    Order  map[string]string      `json:\"order\" binding:\"\"`\n    Extra  map[string]interface{} `json:\"extra\" binding:\"\"`\n}\n\ntype (\n\tFilter     = map[string]FilterItem\n\tFilterCond string\n\tFilterItem struct {\n\t\tCondition FilterCond\n\t\tVal       interface{}\n\t}\n)\n\nconst (\n\t// 筛选条件\n\tCondUndefined FilterCond = \"undefined\"\n\t// 数值\n\tCondEq           FilterCond = \"eq\"\n\tCondLt           FilterCond = \"lt\"\n\tCondElt          FilterCond = \"elt\"\n\tCondGt           FilterCond = \"gt\"\n\tCondEgt          FilterCond = \"egt\"\n\tCondNeq          FilterCond = \"neq\"\n\tCondBetweenValue FilterCond = \"betweenValue\"\n\t// 字符串\n\tCondEqString  FilterCond = \"eqString\"\n\tCondLike      FilterCond = \"like\"\n\t// ... other condition\n\t)\n```\n### del\n请求参数： ids id列表。 根据id删除\n\n\n## 如何快速创建一个模型的curd\n// todo b站做个视频\n\n- 编辑并运行 cmd/generate_model/main.go 编辑需要添加的模型\n会在models目录下 model.go文件\n  编辑模型\n  编辑文件中的 FilterNameMapDBField 此字段为查询条件对db字段的映射\n  编辑文件中的 OrderKeyMap  此字段为排序字段对db字段的映射\n  修改AddData EditData\n  编辑各种scene模型和构造函数 如DefaultSceneModel AdminSceneModel\n- 编辑并运行 数据库迁移\n- 添加路由\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freal-web-world%2Fgo-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freal-web-world%2Fgo-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freal-web-world%2Fgo-api/lists"}