func UpdateUser() gin.HandlerFunc { return func(c *gin.Context) { username := c.Param("username") //username:=c.Query("username") var updatedUser User if err := c.ShouldBind(&updatedUser); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } for i, user := range usersDB { if user.Username == username { usersDB[i].Password = updatedUser.Password c.JSON(http.StatusOK, gin.H{"message": "User updated successfully"}) return } } c.JSON(http.StatusNotFound, gin.H{"error": "User not found"}) } }把里面的username := c.Param("username")改成username:=c.query("username)
时间: 2024-03-08 14:51:33 浏览: 104
如果将`username := c.Param("username")`改为`username := c.Query("username")`,则会从URL查询参数中获取`username`的值,而不是从URL路径参数中获取。因此,需要将路由中的`:username`改为`?username=`的形式,即将路由中的`/users/:username`改为`/users`。
修改后的代码如下:
```
func UpdateUser() gin.HandlerFunc {
return func(c *gin.Context) {
username := c.Query("username")
var updatedUser User
if err := c.ShouldBind(&updatedUser); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
for i, user := range usersDB {
if user.Username == username {
usersDB[i].Password = updatedUser.Password
c.JSON(http.StatusOK, gin.H{"message": "User updated successfully"})
return
}
}
c.JSON(http.StatusNotFound, gin.H{"error": "User not found"})
}
}
```
但需要注意的是,如果将路由中的`:username`改为`?username=`的形式,则无法使用`c.Param("username")`获取URL路径参数的值,因为URL路径参数已经被改为了查询参数。
阅读全文