Namun, ada solusi. Pertama-tama, karena kita hanya memiliki satu parameter exploding dan tidak ada yang lain, pertama-tama kita harus mengumpulkan parameter kita dalam satu []slice :
var params []interface{}
params = append(params, Type)
for _, subtype := range SubTypes {
params = append(params, SubTypes)
}
Karena SQL tidak akan berkembang dengan sendirinya, mari kita perluas loop itu:
var params []interface{}
params = append(params, Type)
inCondition := ""
for _, subtype := range SubTypes {
params = append(params, SubTypes)
if inCondition != "" {
inCondition += ", "
}
inCondition += "?"
}
Dengan asumsi SubTypes berisi []int{1,2,3} , inCondition sekarang harus berisi ?, ?, ? .
Kami kemudian menggabungkannya ke pernyataan SQL kami dan meledakkan argumen:
sqlstr := fmt.Sprintf(`SELECT *
FROM foo
WHERE type = ?
AND subtype IN (%s)`, inCodition)
rows, err := sqldb.Query(sqlstr, params...)
Tentu saja, itu akan sangat keren, jika Anda bisa melewatkan []slice s ke pernyataan yang Anda siapkan, dan secara otomatis diperluas. Tapi itu mungkin memberikan beberapa hasil yang tidak terduga jika Anda berurusan dengan lebih banyak data 'tidak diketahui'.