1

gorp を使用して複数のレコードを効率的に挿入するにはどうすればよいですか? つまり、一度に 1 つずつ挿入する代わりに、バッチ挿入がありますか?

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です。

4

2 に答える 2

3

他のリソースでわかったように、これが機能しない理由は、メモリ内に同じレイアウトがないため、それらのスライスは互換性のあるタイプではinterface{}ありUser{}ません。提案された解決策は、ここに示すように for ループに変換[]User{}することでした: https://golang.org/doc/faq#convert_slice_of_interface[]interface{}

まだ注意事項があります。関数にはポインターを使用する必要がありDbMap.Insert()ます。

これが私がそれを解決した方法です:

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

&v重要であることに注意してください。そうしないInsertと、非ポインターについて文句を言うでしょう。

于 2016-09-07T17:43:21.000 に答える