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] = user c.JSON(http.StatusOK, gin.H{"message": user}) return } } c.JSON(http.StatusNotFound, gin.H{"error": "找不到该用户"}) } }为什么更改不了用户信息?哪里出错了
时间: 2024-03-09 15:47:57 浏览: 19
在这段代码中,更改不了用户信息的原因可能是因为更新用户信息的代码有问题:
```go
usersDB[i] = user
```
应该是将 `updatedUser` 赋值给 `usersDB[i]`,而不是将 `user` 赋值给 `usersDB[i]`,因为 `user` 是遍历到的原始用户信息,而不是更新后的用户信息。应该修改为:
```go
usersDB[i] = updatedUser
```
这样就能够将更新后的用户信息正确地保存到数据库中了。
相关问题
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)
如果将`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路径参数已经被改为了查询参数。
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] = user c.JSON(http.StatusOK, gin.H{"message": user}) return } } c.JSON(http.StatusNotFound, gin.H{"error": "找不到该用户"}) } }和func UpdateUser() gin.HandlerFunc { return func(c *gin.Context) { username := c.Query("username") user, ok := usersDB[username] if !ok { c.JSON(http.StatusNotFound, gin.H{"error": "找不到该用户"}) return } if err := c.ShouldBind(&user); err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) return } usersDB[username] = user c.JSON(http.StatusOK, gin.H{"message": user}) }的区别
这两个函数的区别在于处理用户更新操作的方式不同。第一个函数使用一个循环来遍历用户数据库,找到需要更新的用户,然后将其更新并返回更新后的用户信息;如果找不到该用户,则返回“找不到该用户”的错误信息。
第二个函数使用了一个map来存储用户信息,通过查询用户名获取对应的用户信息。如果该用户不存在,则返回“找不到该用户”的错误信息。如果用户存在,则将用户信息绑定到请求体中并更新用户信息,然后返回更新后的用户信息。
总的来说,第一个函数的实现方式比较简单,但是效率可能会低一些。而第二个函数使用map来存储用户信息,查找和更新用户的效率更高。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)