项目思路
API设计
在这个项目中,我的主要目标是创建一个简单的帖子发布系统,它支持发布帖子并通过UUID访问已发布的帖子内容。下面对我的项目思路进行进一步的扩展。
GET /get/{uuid}
这个API用于获取特定UUID对应的帖子内容。用户提供一个UUID作为路径参数,系统根据这个UUID查找对应的帖子内容并返回。
Response:
{
"uuid": "demoUuid",
"body": "xxx"
}
POST /add
这个API用于发布新的帖子。用户通过POST请求将帖子内容提交给服务器,服务器生成一个UUID,将帖子内容与UUID关联存储,并返回生成的UUID。
Request:
{
"body": "xxx"
}
Response:
{
"uuid": "generatedUuid"
}
项目实战
拉取依赖
为了实现这个项目,我需要使用Go语言和一些第三方库。在代码中已经添加了对github.com/gin-gonic/gin和github.com/google/uuid的依赖。
package main
import (
"github.com/gin-gonic/gin"
"github.com/google/uuid"
// 其他依赖...
)
初始化存储
我创建了一个Storage结构来管理帖子的存储和访问。这个结构有一个Mp字段,是一个用于存储UUID和帖子内容的映射,以及一个Mu字段,用于处理并发访问的锁。
从文件初始化存储
在init函数中,我初始化了一个storage实例,并从文件中加载之前存储的帖子信息。这样,服务器启动时会加载之前的帖子内容。
存储帖子
Store方法用于将新帖子内容存储到存储中。它生成一个UUID,并将帖子内容与UUID关联存储到Mp映射中。然后,它调用appendToFile方法将帖子信息追加到文件中,以便持久化存储。
获取帖子
Load方法用于根据给定的UUID获取帖子内容。它通过读取Mp映射中的数据来实现,如果UUID对应的帖子存在,就返回帖子内容。
API路由
在main函数中,我创建了一个gin引擎实例,并定义了两个路由。
-
GET /get/:uuid:这个路由处理获取帖子内容的请求。它从路径参数中获取UUID,然后调用Load方法获取帖子内容并返回。 -
POST /add:这个路由处理发布新帖子的请求。它从请求体中获取帖子内容,调用Store方法存储帖子,并返回生成的UUID。
启动服务器
最后,我调用router.Run(":8080")来启动服务器,监听端口8080,等待客户端请求。
这个项目的基本结构已经建立,它允许用户通过API发布帖子和获取已发布的帖子内容。你可以根据实际需求进一步优化和扩展这个项目,例如添加错误处理、日志记录、用户认证等功能。同时,你也可以考虑使用数据库来存储帖子数据,以支持更大规模的数据存储和查询。
项目实战
- 拉取依赖
$env:GOPROXY = "https://proxy.golang.com.cn,direct"
go get github.com/gin-gonic/gin
go get github.com/google/uuid
package main
import (
"encoding/json"
"errors"
"github.com/gin-gonic/gin"
"io"
"log"
"os"
"sync"
"time"
"github.com/google/uuid"
)