在学会如何创建帖子之后,我们很自然地就要学习如何获取帖子了。跟前面一样,在编写获取帖子的函数之前,我们需要先了解一下获取帖子的具体步骤。因为程序在尝试获取帖子的时候是没有现成的Post结构可用的,所以它自然也无法通过为Post结构定义方法来获取帖子了。为此,程序需要定义一个GetPost函数,这个函数接受帖子的Id作为参数,并返回一个包含了完整帖子数据的Post结构作为结果:

readPost, _ := GetPost(1)
fmt.Println(readPost)//① {1 Hello World! Sau Sheong}

这段代码没有像之前展示过的代码清单那样,向GetPost函数传递post.Id变量,而是直接向GetPost函数传递了帖子的ID1,以此来强调函数是通过帖子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就会将这个结构返回给调用函数。

results matching ""

    No results matching ""