根据给定的最大帖子数量,一次从数据库里面获取多篇帖子,是一种非常常见的做法。换句话说,程序可以通过执行以下命令,从数据库里面获取前十篇帖子,并将它们放入到一个切片里面:

posts, _ := Posts(10)

代码清单6-12展示了完成这一操作的Posts函数的具体定义。

代码清单6-12 一次获取多篇帖子

func Posts(limit int) (posts []Post, err error) {    
    rows, err := Db.Query("select id, content, author from posts limit $1", limit)    
    if err != nil {        
        return    
    }    
    for rows.Next() {        
        post := Post{}        
        err = rows.Scan(&post.Id, &post.Content, &post.Author)        
        if err != nil {            
            return        
        }        
        posts = append(posts, post)    
    }    
    rows.Close()    
    return
}

Posts函数使用了sql.DB结构的Query方法来执行查询,这个方法会返回一个Rows接口。Rows接口是一个迭代器,程序可以通过重复调用它的Next方法来对其进行迭代并获得相应的sql.Row;当所有行都被迭代完毕时,Next方法将返回io.EOF作为结果。

Posts函数在每次进行迭代的时候都会创建一个Post结构,并将行包含的数据扫描到结构里面,然后再将这个结构追加到posts切片的末尾。当所有行都被迭代完毕之后,Posts函数就会将这个包含了多个Post结构的posts切片返回给调用者。

results matching ""

    No results matching ""