gin框架做一个用户的增删改查并分层 加上token验证,不用数据库,自己定义几个数据模拟数据库 user结构体包括 id password 和username字段
时间: 2024-03-16 13:43:36 浏览: 97
好的,这是一个比较全面的问题,我尽可能详细地回答一下。
首先,我们可以自己定义一个 User 结构体,包括 id、password 和 username 字段。代码如下:
```go
type User struct {
ID int `json:"id"`
Username string `json:"username"`
Password string `json:"password"`
}
```
对于数据存储,我们可以自己定义一个 slice,来模拟数据库的存储。代码如下:
```go
var users []User
```
接着,我们需要使用 Gin 框架来实现用户的增删改查,以及分层和 Token 验证。首先,我们需要导入 Gin 框架的依赖:
```go
import (
"github.com/gin-gonic/gin"
)
```
接下来,我们需要创建一个 Gin 的实例,代码如下:
```go
router := gin.Default()
```
然后,我们可以使用 Gin 框架的路由功能来实现用户的增删改查。对于每个路由,我们需要添加中间件来进行 Token 验证,以确保只有授权的用户才能访问。代码如下:
```go
router.POST("/users", authMiddleware(), createUser)
router.GET("/users/:id", authMiddleware(), getUser)
router.PUT("/users/:id", authMiddleware(), updateUser)
router.DELETE("/users/:id", authMiddleware(), deleteUser)
```
其中,authMiddleware() 是一个中间件函数,用来进行 Token 验证。我们需要在这个函数中检查请求头中的 Token 是否正确,并根据情况返回错误响应。
接下来,我们需要实现每个路由对应的处理函数。代码如下:
```go
func createUser(c *gin.Context) {
var user User
if err := c.BindJSON(&user); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
user.ID = len(users) + 1
users = append(users, user)
c.JSON(http.StatusCreated, user)
}
func getUser(c *gin.Context) {
id, err := strconv.Atoi(c.Param("id"))
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
for _, user := range users {
if user.ID == id {
c.JSON(http.StatusOK, user)
return
}
}
c.JSON(http.StatusNotFound, gin.H{"error": "User not found"})
}
func updateUser(c *gin.Context) {
id, err := strconv.Atoi(c.Param("id"))
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
var newUser User
if err := c.BindJSON(&newUser); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
for i, user := range users {
if user.ID == id {
newUser.ID = id
users[i] = newUser
c.JSON(http.StatusOK, newUser)
return
}
}
c.JSON(http.StatusNotFound, gin.H{"error": "User not found"})
}
func deleteUser(c *gin.Context) {
id, err := strconv.Atoi(c.Param("id"))
if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
for i, user := range users {
if user.ID == id {
users = append(users[:i], users[i+1:]...)
c.JSON(http.StatusOK, gin.H{"message": "User deleted"})
return
}
}
c.JSON(http.StatusNotFound, gin.H{"error": "User not found"})
}
```
最后,我们需要实现 authMiddleware() 中间件函数,用来进行 Token 验证。代码如下:
```go
func authMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
token := c.GetHeader("Authorization")
if token != "my_token" {
c.AbortWithStatusJSON(http.StatusUnauthorized, gin.H{"error": "Unauthorized"})
return
}
c.Next()
}
}
```
这里我们将 Token 固定为 "my_token",实际应用中应该使用更加安全的方式来生成和验证 Token。
至此,我们就完成了使用 Gin 框架实现用户的增删改查,并加上了分层和 Token 验证的功能。完整代码如下:
阅读全文