github 直达 github.com/daodao97/ggm
欢迎大佬们多多指点, 给个 Star.
包含泛型特性的 go1.18
已经正式发布, 于是就迫不及待的体验了一把.
我们来看下日常的 db
交互中, 使用泛型, 将会带来哪些便利.
以下为伪代码, 仅做示意.
// 预定义的结构体
type User struct{
Id int `db:"id"`
Name string `db:"name"`
}
database/sql
的原生写法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 = xxx.Conn()
var list []*User
_ = db.Query(sql, &list)
for _, u := range list {
fmt.Println(u.Id)
}
可以看出, 相对于原生写法, 代码已经十分简洁, 但是我们不得不提前定义 var list []*User
并且需要将其已指针形式 &list
传入类库, 熟悉其他语言的同学就会觉得这里看起来十分蹩脚了.
list, _ := ggm.New[User]().Select(sql)
for _, u := range list {
fmt.Println(u.Id)
}
在泛型类库中, 查询后, 无需任何转换 list
的类型已经是 []User
.
相对于第二写种法, 代码又精进了异步, 更加的简洁直观了.
github 直达 github.com/daodao97/ggm
欢迎大佬们多多指点, 给个 Star.
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.