{"id":,"title":"Casablanca","runtime":,"genres":["drama","romance","war"],"version":1}我们不使用map序列化来创建这个JSON对象(就像我们在上一节中所做的那样),这次将序列化一个自定义的Movie结构体。首先,需要定义一个Movie结构体。我们将在一个新internal/data包中完成此操作,该包稍后将扩展用来封装项目中所有自定义数据类型以及与数据库交互的逻辑。如果您按照文章步骤操作,请创建一个新的internal/data目录,其中包含一个movies.go文件:
$mkdirinternal/data$touchinternal/data/movies.go在这个新文件中,定义Movie结构,像这样:File:internal/data/movies.go
packagemainimport("time")typeMoviestruct{IDint64//唯一整数IDCreatedAttime.Time//创建电影到数据库的时间Titlestring//电影标题Yearint32//电影发布年份Runtimeint32//电影时长Genres[]string//电影类型(爱情片、喜剧片等)Versionint32//版本号从1开始,每更新一次递增}这里需要指出的是,Movie结构体中的所有字段都是可导出的(即以大写字母开头),对Go的encoding/json包可见是必要的。在将结构体编码为JSON时,不会包含任何未导出的字段。现在结构体已经定义完成,让我们更新showMovieHandler处理程序来初始化一个Movie结构体实例,然后使用writeJSON()帮助函数将其作为JSON响应发送给客户端。代码实现很简单:File:cmd/api/movies.go
packagemainimport("fmt""net/