2 回答
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
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
}
- 2 回答
- 0 關注
- 166 瀏覽
添加回答
舉報
