亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang:將行 sql 轉換為對象

golang:將行 sql 轉換為對象

Go
慕桂英546537 2022-08-24 19:05:38
您好,我正在使用pgx來使用我的postgres,并且我對如何將數據庫中的行轉換為聚合有疑問。我正在使用沒有值對象的實體和值對象,使用封送似乎很容易,但是使用值對象我認為導出字段不是一個好主意,然后我的問題來了,如何將我的行轉換為聚合的結構我的聚合 :type Email struct {    address string}type Password struct {    value string}type Name struct {    firstName string    lastName  string}type Person struct {    Id       string    Name     valueObject.Name    Email    valueObject.Email    Password valueObject.Password    Created  time.Time    Updated  time.Time}func NewPerson(name valueObject.Name, email valueObject.Email, password valueObject.Password) *Person {    id := uuid.New()    return &Person{        Id:       id.String(),        Name:     name,        Email:    email,        Password: password,        Created:  time.Now(),        Updated:  time.Now(),    }}我所有的值對象都有一個通過模擬get的函數來獲取私有值的方法,我沒有放置我的值對象的其余代碼,所以它不會變大從表中獲取所有行的 func:func (r *personRepository) GetAll() (persons []*entities.Person, err error) {    qry := `select id, first_name, last_name, email, password created_at, updated_at from persons`    rows, err := r.conn.Query(context.Background(), qry)    return nil, fmt.Errorf("err")}如果有人可以讓我瞥見我如何使用此值對象將此行從銀行傳遞到我的聚合的結構
查看完整描述

1 回答

?
明月笑刀無情

TA貢獻1828條經驗 獲得超4個贊

您可以使用類似這樣的東西(尚未測試,需要優化):


func (r *personRepository) GetAll() (persons []*entities.Person, err error) {

    qry := `select id, first_name, last_name, email, password, created_at, updated_at from persons`

    rows, err := r.conn.Query(context.Background(), qry)


  var items []*entities.Person

  if err != nil {

    // No result found with the query.

    if err == pgx.ErrNoRows {

        return items, nil

    }

    

    // Error happened

    log.Printf("can't get list person: %v\n", err)

    return items, err

  }


  defer rows.Close()


  for rows.Next() {

    // Build item Person for earch row.

    // must be the same with the query column position.


    var id, firstName, lastName, email, password string

    var createdAt, updatedAt time.Time

    

    err = rows.Scan(&id, &firstName, &lastName, &email,

                    &createdAt, updatedAt)

    if err != nil {

        log.Printf("Failed to build item: %v\n", err)

        return items, err

    }


    item := &entities.Person{

      Id: id,

      FirstName: firstName,

      // fill other value

    }


    // Add item to the list.

    items = append(items, item)

  }


  return items, nil

}

不要忘記在查詢中的文本后添加逗號。password


I am using entities and value objects without value object it seems easy using marshal,


對不起,我不知道你的問題中的值對象。


查看完整回答
反對 回復 2022-08-24
  • 1 回答
  • 0 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號