Golang Go语言中如何优雅的进行SQL查询,我想要实现一个基础struct给数据类型继承使用类似于users := User.list()
Golang Go语言中如何优雅的进行SQL查询,我想要实现一个基础struct给数据类型继承使用类似于users := User.list()
现在的方案
var modelPost model.Articles
modelPost.BaseControll.Model = &modelPost
//使用
app.GET("/articles",modelPost.list)
//
list()方法实现了 http handler,可以由 model.Articles 实现,没有时使用 BaseControll 的默认实现
可以使用,但是存在问题
- 1 过于复杂
- 2 编译时无法检测错误
- 2.1 比如没有执行 modelPost.BaseControll.Model = &modelPost 直接调用 modelPost.list 时会报错,但是编译时无法检测
想请教一下有没有更优雅的实现,或者由什么可以修改的地方
代码地址: https://github.com/Treblex/easyStart/tree/master/server/model
更多关于Golang Go语言中如何优雅的进行SQL查询,我想要实现一个基础struct给数据类型继承使用类似于users := User.list()的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于Golang Go语言中如何优雅的进行SQL查询,我想要实现一个基础struct给数据类型继承使用类似于users := User.list()的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Go语言中,优雅地进行SQL查询通常涉及使用ORM(对象关系映射)库,比如GORM或xorm,这些库能帮助你简化数据库操作并减少手动编写SQL的需求。
要实现一个基础struct供其他数据类型继承,并使用类似users := User.list()
的方法,你可以定义一个基础的数据库操作接口,并在具体的数据类型中实现这些接口。这里以GORM为例:
-
定义基础接口:
type Model interface { List() ([]interface{}, error) }
-
为User类型实现接口:
type User struct { gorm.Model // 包含ID, CreatedAt, UpdatedAt, DeletedAt字段 Name string } func (u User) List() ([]interface{}, error) { var users []User err := db.Find(&users).Error return users, err }
-
使用:
var users []User err := User{}.List()(&users) // 注意这里可能需要调整List方法的签名以直接返回[]User if err != nil { log.Fatal(err) } fmt.Println(users)
注意:上述代码是一个简化的示例,实际使用时可能需要对接口和方法进行更精细的设计,比如处理分页、排序等。此外,由于Go不支持传统的类继承,因此通常通过组合和接口来实现类似的功能复用。在实际项目中,建议根据具体需求选择合适的ORM库和设计模式。