day3 社区话题页面小demo实现| 青训营笔记

82 阅读1分钟

这是我参加第五届青训营伴学笔记创作活动的第三天

在这里实现一个小demo(在这里只实现后端),如下图:

需求背景

image.png

需求描述

image.png

需求用例

image.png 给用户返回topicpage,包含topic主题,和postlist回帖列表

结构体定义

image.png

type Topic struct {
	Id         int64  `json:"id"`
	Title      string `json:"title"`
	Content    string `json:"content"`
	CreateTime int64  `json:"create_time"`
}

分别对应主题的id,标题,目录以创建时间

type Post struct {
	Id         int64  `json:"id"`
	ParentId   int64  `json:"parent_id"`
	Content    string `json:"content"`
	CreateTime int64  `json:"create_time"`
}

Post也有四个字段,分别对应id,parentid对应该回帖所对应的topic,目录以及创建时间

分层结构

image.png 整体分为三层,repository数据层,service逻辑层,controller视图层,数据层关联底层数据模型,封装外部数据的增删改查,数据保存在本地data文件中,通过文件操作拉去话题,帖子数据队service层透明,屏蔽下游数据差异,也就不管下游是文件,还是数据库,还是微服务等,对service层的接口模型是不变的。视图层负责处理和外部的交互逻辑,以view试图的形式返回给客户端,在这里,我们封装json格式化的请求结果。

组件工具

  • gin:高性能go web开发框架
  • go mod

repository

image.png

image.png 用两个map存储topic和post,读取文件初始化得到两个map,存储所有topic和postlist

image.png

image.png 上图实现了查询的操作,用到了sync.once主要适用高并发的场景下只执行一次的场景。

service

image.png

image.png

image.png 通过prepareInfo()方法,话题和回帖信息的获取都依赖topicid,所以可以并行执行,题高执行效率。

controller

image.png

image.png

运行结果

image.png