GGM: 首个 Gloang 泛型 ORM 库发布 🚀

daodao97 · · 1367 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

#### github 直达 [github.com/daodao97/ggm]( https://github.com/daodao97/ggm) 欢迎大佬们多多指点, 给个 Star. 包含泛型特性的 `go1.18` 已经正式发布, 于是就迫不及待的体验了一把. 我们来看下日常的 `db` 交互中, 使用泛型, 将会带来哪些便利. 以下为伪代码, 仅做示意. ```go // 预定义的结构体 type User struct{ Id int `db:"id"` Name string `db:"name"` } ``` ### `database/sql` 的原生写法 ```go db := sql.Open() stmt, err := db.Prepare(sql) if err != nil { return } rows, err := stmt.Query(args...) if err != nil { return } var list []*User for rows.Next() { tmp := new(User) rows.Scan(tmp.Id, tmp.User) list = append(list, tmp) } ``` 原生写法相对比较繁琐, 可能一般项目中不会作为首选方案. ### 稍微封装下的 db 类库 ```go db = xxx.Conn() var list []*User _ = db.Query(sql, &list) for _, u := range list { fmt.Println(u.Id) } ``` 可以看出, 相对于原生写法, 代码已经十分简洁, 但是我们不得不提前定义 `var list []*User` 并且需要将其已指针形式 `&list` 传入类库, 熟悉其他语言的同学就会觉得这里看起来十分蹩脚了. ### 泛型的 db 类库 ```go list, _ := ggm.New[User]().Select(sql) for _, u := range list { fmt.Println(u.Id) } ``` 在泛型类库中, 查询后, 无需任何转换 `list` 的类型已经是 `[]User`. 相对于第二写种法, 代码又精进了异步, 更加的简洁直观了. ### 传送门 更多内容可以查下项目详情 github 直达 [github.com/daodao97/ggm]( https://github.com/daodao97/ggm) 欢迎大佬们多多指点, 给个 Star.

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1367 次点击  
加入收藏 微博
1 回复  |  直到 2022-03-21 10:34:42
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传