Go语言工程实践课后作业 | 青训营

141 阅读3分钟

项目思路

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/gingithub.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发布帖子和获取已发布的帖子内容。你可以根据实际需求进一步优化和扩展这个项目,例如添加错误处理、日志记录、用户认证等功能。同时,你也可以考虑使用数据库来存储帖子数据,以支持更大规模的数据存储和查询。

项目实战

  1. 拉取依赖

$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"
)