改进代码t, _ := strconv.Atoi(ctx.Query("t")) switch t { case 1: req := []*models.Flaw case 2: req := []*models.Issue case 3: req := []*models.Record case 4: req := []*models.Quality case 5: req := []*models.Inspection } if err := ctx.ShouldBind(&req); err != nil { ctx.JSON(400, models.Response{ Code: 400, Msg: "参数有误", Data: err.Error(), }) return } res := common.DB.Create(&req)
时间: 2023-12-14 08:38:57 浏览: 81
可以尝试将代码改为以下形式:
```
t, err := strconv.Atoi(ctx.Query("t"))
if err != nil {
ctx.JSON(400, models.Response{
Code: 400,
Msg: "参数有误",
Data: err.Error(),
})
return
}
var req interface{}
switch t {
case 1:
req = []*models.Flaw{}
case 2:
req = []*models.Issue{}
case 3:
req = []*models.Record{}
case 4:
req = []*models.Quality{}
case 5:
req = []*models.Inspection{}
default:
ctx.JSON(400, models.Response{
Code: 400,
Msg: "参数有误",
Data: "请选择正确的类型",
})
return
}
if err := ctx.ShouldBind(&req); err != nil {
ctx.JSON(400, models.Response{
Code: 400,
Msg: "参数有误",
Data: err.Error(),
})
return
}
res := common.DB.Create(req)
```
这样做的好处是:
- 将类型转换和请求体绑定分开处理,避免出现代码冗余或错误。
- 使用 `interface{}` 类型来接收不同类型的请求体,避免了类型转换的重复操作。
- 在 `switch` 语句中增加了默认分支,可以处理非法的类型参数。
阅读全文