golang gorp插入多条记录

时间:2016-05-02 19:56:59

标签: go gorp

使用gorp如何有效地插入多个记录?也就是说,不是一次插入一个,是否有批量插入?

var User struct {
   Name string
   Email string
   Phone string
}
var users []Users
users = buildUsers()
dbMap.Insert(users...) //this fails compilation
//I am forced to loop over users and insert one user at a time. Error Handling omitted for brevity

gorp有更好的机制吗?驱动程序是MySQL。

2 个答案:

答案 0 :(得分:3)

正如我在其他资源上发现的那样,这不起作用的原因是interface{}User{}在内存中没有相同的布局,因此它们的切片不是兼容类型。建议的解决方案是将[]User{}转换为for []interface{} for for循环,如下所示:https://golang.org/doc/faq#convert_slice_of_interface

仍然需要注意:您需要使用DbMap.Insert()函数的指针。

以下是我如何解决它:

s := make([]interface{}, len(users))
for i, v := range users {
    s[i] = &v
}
err := dbMap.Insert(s...)

注意 &v很重要,否则Insert会抱怨非指针。

答案 1 :(得分:0)

看起来gorp没有为原始SQL或多值插入提供包装的东西(总是依赖于SQL方言)。
你担心速度还是交易?如果没有,我只会在for循环中进行插入。