6.3.4 获取帖子
在学会如何创建帖子之后,我们很自然地就要学习如何获取帖子了。跟前面一样,在编写获取帖子的函数之前,我们需要先了解一下获取帖子的具体步骤。因为程序在尝试获取帖子的时候是没有现成的 Post
结构可用的,所以它自然也无法通过为 Post
结构定义方法来获取帖子了。为此,程序需要定义一个 GetPost
函数,这个函数接受帖子的Id作为参数,并返回一个包含了完整帖子数据的 Post
结构作为结果:
readPost, _ := GetPost(1)
fmt.Println(readPost) ❶
❶ {1 Hello World! Sau Sheong}
这段代码没有像之前展示过的代码清单那样,向 GetPost
函数传递 post.Id
变量,而是直接向 GetPost
函数传递了帖子的 ID
值 1
,以此来强调函数是通过帖子 ID
来获取帖子的。代码清单6-9展示了 GetPost
函数的具体实现代码。
代码清单6-9 获取一篇帖子
func GetPost(id int) (post Post, err error) {
post = Post{}
err = Db.QueryRow("select id, content, author from posts where id =
➥$1", id).Scan(&post.Id, &post.Content, &post.Author)
return
}
GetPost
函数首先创建了一个空的 Post
结构,然后在对结构进行设置之后,将其用作函数的返回值:
post = Post{}
跟之前一样,程序通过串联 QueryRow
方法和 Scan
方法,将执行查询所得的数据复制到空的 Post
结构里面。需要注意的是,因为获取单个帖子无需重复执行相同的SQL语句,所以程序使用的是 sql.DB
结构的 QueryRow
方法而不是 sql.Stmt
结构的 QueryRow
方法。实际上, Create
方法和 GetPost
函数既可以使用 sql.DB
来实现,也可以使用 sql.Stmt
来实现,在这里使用 sql.DB
而不是沿用 sql.Stmt
只是为了展示另一种可行的做法。
在将数据库包含的数据填充到空的 Post
结构之后, GetPost
就会将这个结构返回给调用函数。