Go语言项目实战(模拟发布话题和回帖) | 青训营笔记

309 阅读2分钟

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

青训营学习了几天,前面节奏有些快,没课后理理前面的知识,主要是针对模拟发布话题和帖子项目。从需求出发到最终实现。

需求设计

针对一个社区页面服务,需要能够显示话题和帖子,用户能够查看及发布新的帖子等功能。

  • 展示话题(标题,文字描述)和回帖列表;
  • 仅实现服务器,数据存放在文件中
  • 扩展功能:完成帖子发布,保证帖子ID唯一性,考虑并发问题

需求用例

查看、发布等

话题与帖子的关系

帖子,其中parentId为话题Id

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

话题,话题对应帖子为一对多模式

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

分层结构

  • Reposity数据层:获取文件中话题和帖子的数据
  • Service逻辑层:调用数据层接口
  • Controller视图层:将将数据封装给服务端调用 服务端server.go:初始化数据,提供Get和Post接口;调用视图层接口 image.png

各个模块实现

从上层到底层

1. server

该部分使用了Go的Gin框架; 其中:

  • GET为获取已有的topic和post
  • POST分为两部分,分别为添加topic和post; 可见起调用了controller层的方法。 image.png

2. Controller视图层

  • 初始化页面信息

1652109761(1).png

  • 创建话题

image.png

  • 创建帖子

1652109398(1).png

3. Service逻辑层

  • 初始化页面信息 根据话题id获取post image.png

image.png

image.png

image.png

  • 创建话题

image.png

image.png

image.png

image.png

image.png

image.png

4. Repository数据层

  • 定义Topic和Post结构 Topic: image.png

Post image.png

  • 初始化页面信息

image.png

image.png

  • 创建话题 通过长度获取话题的id。 image.png

image.png

  • 创建帖子 定义在Post中的函数 image.png

运行结果

image.png

  • POST 创建帖子

git bash输入命令: curl -d 'topic_id=3' -d 'content=hello world' -X POST http://127.0.0.1:8080/community/post/do

image.png

创建话题

git bash输入命令:curl -d 'title=byte' -d 'content=xjj and xgg' -X POST http://127.0.0.1:8080/community/topic/do

image.png