mysql - 如何在 golang 中编写一个通用方法以在任何 mysql 表中插入记录

标签 mysql rest go http-post mux

我正在 golang 中创建一个 rest api,并向表中发出一个 POST 请求。

为此,我创建了一个结构。基本上,struct 中的变量与名为 users 的表中的列相同。

并编写了一个函数来发出 POST 请求。代码运行良好,发出 POST 请求时的参数已成功插入表中。

type User struct {
    ID      int
    Name    string
    Lname   string
    Country string
}


func insertUser(response http.ResponseWriter, request *http.Request)  
{
    var userDetails User
    decoder := json.NewDecoder(request.Body)
    err := decoder.Decode(&userDetails)
    defer request.Body.Close()
    if err != nil {
        returnErrorResponse(response,request, httpError)
    } else {
        httpError.Code = http.StatusBadRequest
        if userDetails.Name == "" {
             httpError.Message = "first name can't be empty"
             returnErrorResponse(response, request, httpError)
        } else if userDetails.Lname == "" {
             httpError.Message = "Last name can't be empty"
             returnErrorResponse(response, request, httpError)
        } else {
             isInserted := insertUserInDB(userDetails)
             if isInserted {
                  getAllUsers(response, request)
             } else {
                  returnErrorResponse(response, request, httpError)
             }
        }
    }
}

这里是 insertUserInDB(userDetails) 定义

func insertUserInDB(userDetails User) bool {
  stmt, err := db.Prepare("insert into users set Name=?, Lname=?, 
Country=?")
  if err != nil {
      fmt.Print("helper_methods.go : 118")
    fmt.Println(err)
    return false
  }

  _, queryError := stmt.Exec(tableName, userDetails.Name, 
userDetails.Lname, userDetails.Country)
  if queryError != nil {
      fmt.Print("helper_methods.go : 125")
    fmt.Println(queryError)
    return false
  }
  return true
}

有什么方法可以编写一个通用函数来在数据库中的任何表中插入记录?

我们可以动态地或任何其他方式创建结构吗?

请帮帮我。

最佳答案

与其他语言一样,您可以使用 ORM图书馆为你做数据库翻译,例如GORM ,或者您可以自己翻译。由于您已经实现了手动保存数据,请参阅此 article了解如何手动检索数据。

如果你只是想编写一个通用方法,通过匹配结构字段名称来生成/执行 SQL 查询,你可以使用 go 的 reflect 包。您必须使用 reflect.TypeOf() 来识别结构字段以获取您传递的变量的类型,然后迭代 StructField,您可以使用类型上的 Field() 方法。 StructField 将显示NameValueOf() 将允许您访问该值。然后可以使用名称和值来构造查询。 为了更好地理解,我建议您阅读一些关于 reflect 的文章。喜欢thisthis .

关于mysql - 如何在 golang 中编写一个通用方法以在任何 mysql 表中插入记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54432854/

相关文章:

php - 在基于读写的服务器集上构建 Web 应用程序

java - 如何将MySQL连接到Java程序

php - CakePHP API Blackhole - validatePost 禁用不起作用?

go - 如何从 PUT、DELETE 方法 golang (gin gonic) 中检索数据

go - 如何使用 go gin 从 Auth0 jwt token 检索权限

php - SQLSTATE[42S22] : Column not found: 1054 Unknown column '$Valuess' in 'field list' '

mysql - 让mysql在加入时使用 View

c# - 将用户定义类的实例作为数据传递给 ServiceStack PUT

java - 用于过滤资源的 Spring Rest Controller

go - 函数按值返回锁