Golang Go语言中如何优雅的进行SQL查询,我想要实现一个基础struct给数据类型继承使用类似于users := User.list()

发布于 1周前 作者 sinazl 来自 Go语言

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

1 回复

更多关于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为例:

  1. 定义基础接口

    type Model interface {
        List() ([]interface{}, error)
    }
    
  2. 为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
    }
    
  3. 使用

    var users []User
    err := User{}.List()(&users) // 注意这里可能需要调整List方法的签名以直接返回[]User
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(users)
    

注意:上述代码是一个简化的示例,实际使用时可能需要对接口和方法进行更精细的设计,比如处理分页、排序等。此外,由于Go不支持传统的类继承,因此通常通过组合和接口来实现类似的功能复用。在实际项目中,建议根据具体需求选择合适的ORM库和设计模式。

回到顶部