我正在 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
将显示Name
,ValueOf()
将允许您访问该值。然后可以使用名称和值来构造查询。
为了更好地理解,我建议您阅读一些关于 reflect 的文章。喜欢this和 this .
关于mysql - 如何在 golang 中编写一个通用方法以在任何 mysql 表中插入记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54432854/