如何在golang写的常用方法中的任何MySQL表中插入记录

问题描述 投票:0回答:1

我创造了一个golang REST API,使一个POST请求到一个表。

为此,我已经创建了一个结构。基本上如表中的列命名users在结构中的瓦尔相同。

并写入功能做出POST请求。和代码工作正常,在PARAMS同时使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
}

有没有什么办法来写一个共同的功能在任何数据库表中插入记录?

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

请帮我在这里。

mysql rest go http-post mux
1个回答
0
投票

像在其他语言中,你可以使用ORM库做DB翻译给你,例如GORM,或者你可以自己做翻译。既然你已经实现了手动保存数据,请参阅本article对于如何手动检索数据。

通过匹配结构字段名,你可以使用Go的反映包如果你只是想编写生成一个通用的方法/执行SQL查询。你将不得不使用reflect.TypeOf()让你传递的变量的类型,然后遍历StructField,你可以通过使用该类型的Field()方法去识别结构域。该StructField将揭示NameValueOf()将允许您访问的价值。名称和值可以被用来构造查询。为了得到更好的理解,我建议你读上反映了一些文章。像thisthis

© www.soinside.com 2019 - 2024. All rights reserved.