选择特定列时如何获取对应的字段?

这是代码:


// User Model

type User struct {

    UserID        int           `db:"user_id"`

    UserNme       string        `db:"user_nme"`

    UserEmail     string        `db:"user_email"`

    UserAddressID sql.NullInt64 `db:"user_address_id"`

}

func (ur *userRepository) FindAll() ([]models.User, error) {

    var users []models.User

    query := "select user_nme from users"

    err := ur.Db.Select(&users, query)

    if err != nil {

        return nil, err

    }

    return users, nil

}

结果:


&[]models.User{models.User{UserID:0, UserNme:"Jay Durgan", UserEmail:"", UserAddressID:sql.NullInt64{Int64:0, Valid:false}}, models.User{UserID:0, UserNme:"Arne Balistreri", UserEmail:"", UserAddressID:sql.NullInt64{Int64:0, Valid:false}}, models.User{UserID:0, UserNme:"Greg Willms", UserEmail:"", UserAddressID:sql.NullInt64{Int64:0, Valid:false}}, models.User{UserID:0, UserNme:"Lady Aisha McLaughlin", UserEmail:"", UserAddressID:sql.NullInt64{Int64:0, Valid:false}}, models.User{UserID:0, UserNme:"Mrs. Phoebe Boyle", UserEmail:"", UserAddressID:sql.NullInt64{Int64:0, Valid:false}}}% 

正如您所看到的,我没有查询user_id,user_email和user_address_idcolumns ,但结果给我这些字段的值为零。


那么,有没有办法只获取与查询列对应的字段呢?另外,我不想这样写:&user.userNme, &user.xxx,&user.xxx这意味着编写每个字段并填充它。太冗长了。


预期结果是:{UserNme: "Jay Durgan"}...


牛魔王的故事
浏览 116回答 2
2回答

牧羊人nacy

通过使用结构,你不能。其他字段仍然存在,但值为零。这些字段是结构的属性,因此无论您是否需要它,无论它是否存储从数据库操作检索的值,所有字段仍然存在。对于您的情况,唯一的解决方案是使用地图,因此只会检索对应字段的值。var users []map[string]interface{}query := "select user_nme from users"err := ur.Db.Select(&users, query)if err != nil {    return nil, err}结果:&[]map[string]interface{}{map[string]interface{}{UserNme:"Jay Durgan"}, ...}

开心每一天1111

你可以试试这个func (ur *userRepository) FindAll() ([]models.User, error) {    users := []models.User{}.UserNme    query := "select user_nme from users"    err := ur.Db.Select(&users, query)    if err != nil {        return nil, err    }    return users, nil}您也可以点击此链接http://go-database-sql.org/retrieving.html
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go