gin框架新增3个接口 根据请求的等级参数返回对应经验值并将查询记录存入redis 接口名:/get/level_exp 请求方式:Get 请求参数:level,类型 int,必填,说明:要查询的等级
时间: 2024-03-16 16:43:20 浏览: 148
好的,这个接口可以这样实现:
```go
import (
"github.com/gin-gonic/gin"
"github.com/go-redis/redis"
"strconv"
)
// 定义经验值和等级的对应关系
var levelExpMap = map[int]int{
1: 100,
2: 200,
3: 300,
// ... 其他等级的经验值
}
func GetLevelExpHandler(c *gin.Context) {
// 获取请求参数 level
levelStr := c.Query("level")
if levelStr == "" {
c.JSON(400, gin.H{"error": "missing parameter 'level'"})
return
}
// 将 level 转为 int 类型
level, err := strconv.Atoi(levelStr)
if err != nil {
c.JSON(400, gin.H{"error": "parameter 'level' must be integer"})
return
}
// 从 Redis 中查询经验值
redisClient := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // Redis 服务器的密码
DB: 0, // Redis 数据库编号
})
key := "level_exp:" + levelStr
exp, err := redisClient.Get(key).Result()
if err == redis.Nil {
// Redis 中没有该记录,需要计算经验值
exp = strconv.Itoa(levelExpMap[level])
err = redisClient.Set(key, exp, 0).Err() // 将查询结果存入 Redis
if err != nil {
c.JSON(500, gin.H{"error": "failed to store query result to Redis"})
return
}
} else if err != nil {
c.JSON(500, gin.H{"error": "failed to query from Redis"})
return
}
c.JSON(200, gin.H{"exp": exp})
}
```
这个接口的实现主要包括以下几个步骤:
1. 获取请求参数 level,并进行参数校验。
2. 从 Redis 中查询经验值,如果查询不到则计算经验值,并将查询结果存入 Redis。
3. 返回经验值。
阅读全文