GO语言工程实践课后作业:实现思路、代码以及路径记录 | 青训营

85 阅读3分钟

GO语言工程实践课后作业:实现思路、代码以及路径记录 | 青训营

这是我参与「第六届青训营 -后端场」笔记创作活动的的第7篇笔记

需求描述

1.展示话题和回帖列表
2.只是实现本地web服务
3.话题和回帖用文件存储

需求分析

一个话题下面有多个用户的评论,评论中有评论时间和内容,话题有内容和title and createtime

分层结构

数据层:数据model 数据库中的或数据中的crud

逻辑层: 业务entity 处理核心业务逻辑输出

视图层:视图view ,处理和外部的交互逻辑

后面操作需要安装gin web框架,我这里已经安装了,直接继续

实现思路

首先我们分析需求发现一共有两个主要的对象,一个是贴子,就是用户发表的文章,一个是用户在其他用户下面发的评论,也就是话题和回帖,从前端页面上来说的话应该是我们点击一个文章,传入后端一个文章的id,然后后端通过文章id查询到对应的文章对象,然后再通过文章id查询到所有在该文章下面的评论和用户,返回前端进行显示

实现过程

1.创建对象 代码中读取application.yml文件的内容和初始化数据库的在前面的文章中有所描述,就不再讲解了

image.png

image.png 上面是两个主要的对象,创建repository中的对象要注意,一般来说有以下几步:

1.根据数据库写一个struct结构体,后面的注解字段名需要和数据相同

2.写一个tablename和表明映射起来

3.写一个xxxDao的结构体来和数据库交互

后面相关的方法我们从controller开始写,再到service,再到repository,有需要啥方法就在repository中添加什么方法

image.png

写一个返回值的结构体对象,开始写controller层

image.png

写到这里我们发现需要再service中写一个根据topicid来查询pageinfo的方法

image.png

上面第一个结构体pageandTopic是我们需要返回的东西,第二结构体创建的原因是为了操作方便,如何不使用querypageinfoflow,那么我们要查出一篇文章以及对应的remark就会非常麻烦,所以引入这个对象流

image.png

这里使用sync.WaitGroup和协程,来保证这个查询的效率,之后这两个协程执行完之后才可以往下执行 我们发现这里面需要用到dao层,里面的的queryTOpicid方法,是通过topicdao来执行的,这也就是我们再dao层需要用一个xxxDao来交互数据库的方法的原因

image.png 上面就是最底层的交互数据的代码

image.png 最后将controller方法写到路由的方法中间,也可以写一个中间件写在外面

image.png

我的项目结构

image.png

image.png 最后返回数据的时候就不知道什么原因导致显示不成来data,但是debug data数据是存在的,这个问题目前还没有解决,希望有大佬可以给个建议,谢谢

还有一个遇到的问题是

image.png

初始化数据库的时候var Db *gorm.DB要写到外面来,这样dao层就可以直接调用,Db前面D要大写,否则其他地方访问不到,是私人的