Go语言进阶(工程进阶03项目实践)| 青训营笔记

68 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 5 天,今天主要学习了工程初步实践的内容,做一个简单梳理。对比自己java后端调试的过程和项目经验,印证学到了很多。

分析需求

需求描述->需求用例(实体,实体之间的联系)->ER图(模型)

分层结构

  • 数据层(Repository):数据Model,外部数据的增删改查(逻辑层就可以不关心底层的数据存储,只获取数据)
  • 逻辑层(Service):业务Entity,处理核心业务逻辑输出
  • 视图层(Controller):视图view,处理与外部的交互逻辑

与之前自己参加过的项目中,分三层后端相互印证,经过学习才明白,做隔离的原因。之前一直很奇怪,为什么要做这么多通道,而不在一层里解决。现在看来,项目实施过程中,确实便于需求更改和环境调整。

组件工具

Gin 高性能go web框架。

go mod init

go get ***pkg***

数据层(Repository)

如何实现查询

全扫描遍历 -> index(使用map,在内存中存储并索引)->return data 到逻辑层

sync.Once 适合在高并发场景下,只进行一次的操作。节省内存占用。

之前,通过C++在Linux中,自己从零用B+树,对表数据进行建立索引。添加查找、插入等操作。在有map封装下,简单很多。

逻辑层(Service)

Service,主要是将数据经过处理打包为实体

参数校验(输入非0非法校验)->准备数据(向Repository请求数据)->组装实体(传回数据)

准备数据:没有前置性的任务可以并行实现。wait()阻塞,post后返回。

视图层(Controller)

与外部交互(处理错误码,类型转换,构建View对象)

向内部提交请求

Router

通过main函数里的gin

初始化数据索引->初始化引擎配置-> 构建路由->启动服务

从而使,函数接口以http的形式对外暴露。

运行

go run server.go

使用 curl --location --request GET 'http://ip:port/?a=value' json 简单测试接口是否通了

其他参数都接触过,此处json是指以json形式展示返回数据。如果测试post,curl能否简单测试,一般自己用firefox的restclient。

将大需求拆分小需求。