Get Object возвращает пустую строку в виде значений Golang - PullRequest
1 голос
/ 05 февраля 2020

Я пытаюсь получить пользователей из БД с помощью gorm, и я получаю ответ 200, но полученный объект пользователя имеет пустые значения

{
    "id": "",
    "firstName": "",
    "lastName": "",
    "email": "",
    "createdAt": "0001-01-01T00:00:00Z",
    "updatedAt": "0001-01-01T00:00:00Z",
    "deletedAt": null
}

, вот моя модель и мой метод reg

func (user *User) Get(db *gorm.DB, uid string) *errors.Error {
    fmt.Println("This is user ID %s", uid)

    var err error
    err = db.Debug().Model(User{}).Where("id = ?", uid).Take(&user).Error
    if err != nil {
        return errors.NewBadRequestError(fmt.Sprintf("error when trying to get user: %s", err.Error()))
    }
    if gorm.IsRecordNotFoundError(err) {
        return errors.NewBadRequestError(fmt.Sprintf("user not found: %s", err.Error()))
    }
    return nil
}

модель

type User struct {
    ID string `gorm:"primary_key;" json:"id"`
    FirstName string     `gorm:"size:255;not null;column:firstName" json:"firstName"`
    LastName  string     `gorm:"size:255;not null;column:lastName" json:"lastName"`
    Email     string     `gorm:"size:100;not null;unique;column:email" json:"email"`
    CreatedAt time.Time  `gorm:"default:CURRENT_TIMESTAMP;column:createdAt" json:"createdAt"`
    UpdatedAt time.Time  `gorm:"default:CURRENT_TIMESTAMP;column:updatedAt" json:"updatedAt"`
    DeletedAt *time.Time `sql:"index;column:deletedAt" json:"deletedAt"`
}

мой логин обслуживания c

func GetUser(userId string) (*users.User, *errors.Error) {
    // result := &users.User{Base: {

    // }, }
    fmt.Println("This is user ID 2 %s", userId)
    result := &users.User{}
    if err := result.Get(database.DB, userId); err != nil {
        return nil, err
    }
    return &users.User{}, nil
}

мой контроллер

func GetUser(c *gin.Context) {
    userId := c.Param("user_id")
    fmt.Println(userId)

    user, getErr := services.GetUser(userId)
    if getErr != nil {
        // TODO: handle user createing error
        c.JSON(getErr.Status, getErr)
        return
    }
    c.JSON(http.StatusOK, user)
}

1 Ответ

2 голосов
/ 05 февраля 2020

В вашей сервисной логике c вы возвращаете указатель, а не значение.

func GetUser(userId string) (*users.User, *errors.Error) {

  fmt.Println("This is user ID 2 %s", userId)
  result := &users.User{}
  if err := result.Get(database.DB, userId); err != nil {
    return nil, err
  }
  return &users.User{}, nil
}

Это должно быть:

func GetUser(userId string) (*users.User, *errors.Error) {
    fmt.Println("This is user ID 2 %s", userId)
    result := &users.User{ID: userId}
    if err := result.Get(database.DB, userId); err != nil {
        return nil, err
    }
    return result, nil
}
...