postgresql – 创建一个数组/切片以在Golang中存储数据库查询结
发布时间:2020-12-13 18:06:56 所属栏目:百科 来源:网络整理
导读:我刚刚开始使用golang,我正在尝试从Postgres用户表中读取几行,并将结果存储为用于对行进行建模的用户结构数组. type User struct { Id int Title string}func Find_users(db *sql.DB) { // Query the DB rows,err := db.Query(`SELECT u.id,u.title FROM use
我刚刚开始使用golang,我正在尝试从Postgres用户表中读取几行,并将结果存储为用于对行进行建模的用户结构数组.
type User struct { Id int Title string } func Find_users(db *sql.DB) { // Query the DB rows,err := db.Query(`SELECT u.id,u.title FROM users u;`) if err != nil { log.Fatal(err) } // Initialize array slice of all users. What size do I use here? // I don't know the number of results beforehand var users = make([]User,????) // Loop through each result record,creating a User struct for each row defer rows.Close() for i := 0; rows.Next(); i++ { err := rows.Scan(&id,&title) if err != nil { log.Fatal(err) } log.Println(id,title) users[i] = User{Id: id,Title: title} } // .... do stuff } 正如您所看到的,我的问题是我想事先初始化一个数组或切片以存储所有数据库记录,但我不知道会提前记录多少条记录. 我正在权衡几种不同的方法,并希望找出以下哪些在golang社区中使用最多 – >事先创建一个非常大的数组(例如10,000个元素).似乎很浪费 谢谢!
Go具有内置追加功能,正是出于此目的.它需要一个切片和一个或多个元素,并将这些元素附加到切片,返回新切片.此外,切片的零值(nil)是长度为零的切片,因此如果附加到零切片,它将起作用.因此,您可以这样做:
type User struct { Id int Title string } func Find_users(db *sql.DB) { // Query the DB rows,u.title FROM users u;`) if err != nil { log.Fatal(err) } defer rows.Close() var users []User for rows.Next() { err := rows.Scan(&id,&title) if err != nil { log.Fatal(err) } log.Println(id,title) users = append(users,User{Id: id,Title: title}) } if err := rows.Err(); err != nil { log.Fatal(err) } // ... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |