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

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

Go sql從掃描返回多行

Go sql從掃描返回多行

Go
元芳怎么了 2022-06-01 18:10:49
我正在使用 Postgresql 數據庫。這是我要返回多行的代碼塊:type NewsPaper struct {    language string    logo_url string    slug string    ranking string    title string    search_term string}func GetNewsPapers()  []byte{    db := GetDB()    newspaper := NewsPaper{}    var json = jsoniter.ConfigCompatibleWithStandardLibrary    rows, err := db.Query(`SELECT title, language, ranking, slug, search_term, logo_url FROM public.news_newspaper`)    if err != nil {        log.Println(err)    }    defer rows.Close()    //results := []NewsPaper  // error : type []NewsPaper is not an expression    for rows.Next() {        err = rows.Scan(&newspaper.title, &newspaper.language, &newspaper.ranking, &newspaper.slug, &newspaper.search_term, &newspaper.logo_url)        if err != nil {            log.Println(err)        }        //results = append(results, newspaper)    }    fmt.Println(newspaper)  // printing last row    err = rows.Err()    if err != nil {        panic(err)    }    values, _ := json.Marshal(newspaper)    //fmt.Println(values)    return values}問題是它從表中返回最后一行。我也嘗試將結果存儲在數組中,但我沒有成功。
查看完整描述

2 回答

?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

您為每一行設置相同的結構變量,這就是為什么您只獲取最后一行信息。


用于results := []NewsPaper{}創建空切片并為每一行創建新結構。這應該可行,我添加了一些評論。


rows, err := db.Query(`SELECT title, language, ranking, slug, search_term, logo_url FROM public.news_newspaper`)

if err != nil {

    log.Println(err)

}

results := []NewsPaper{} // creating empty slice

defer rows.Close()

for rows.Next() {

    newspaper := NewsPaper{} // creating new struct for every row

    err = rows.Scan(&newspaper.title, &newspaper.language, &newspaper.ranking, &newspaper.slug, &newspaper.search_term, &newspaper.logo_url)

    if err != nil {

        log.Println(err)

    }

    results = append(results, newspaper) // add new row information

}

fmt.Println(results)  // printing result


查看完整回答
反對 回復 2022-06-01
?
largeQ

TA貢獻2039條經驗 獲得超8個贊

基本 CRUD 的另一種方法


import (

    "github.com/jmoiron/sqlx"

    "context"

)



type NewsPaper struct {

    Language   string `json:"language" db:"language"`

    LogoURL    string `json:"logo_url" db:"logo_url"`

    Slug       string `json:"slug" db:"slug"`

    Ranking    string `json:"ranking" db:"ranking"`

    Title      string `json:"title" db:"title"`

    SearchTerm string `json:"search_term" db:"search_term"`

}


type NewsPaperRepository interface {

    List(ctx context.Context) ([]NewsPaper, error)

}


type newsPaperRepository struct {

    db *sqlx.DB

}


func (r *newsPaperRepository) List(ctx context.Context) ([]NewsPaper, error) {


    const selectQuery = `SELECT title, language, ranking, slug, search_term, logo_url FROM public.news_newspaper`

    var newsPapers []NewsPaper

    if err := r.db.SelectContext(ctx, &newsPapers, selectQuery); err != nil {

        return nil, fmt.Errorf("news paper repository/problem while trying to retrieve news papers from database: %w", err)

    }

    return newsPapers, nil

}


查看完整回答
反對 回復 2022-06-01
  • 2 回答
  • 0 關注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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