方法1、使用語言的for語句循環生成SQL語句中的“?”,類似這樣:
新建方法
func placeholders(n int) string {
var b strings.Builder
for i := 0; i < n-1; i++ {
b.WriteString("?,")
}
if n > 0 {
b.WriteString("?")
}
return b.String()
}
調用方法:
var ids []interface{}
err := c.BindJSON(&ids)
query := fmt.Sprintf("delete from device where id in (%s)", placeholders(len(ids)))
_, err = models.DB.Exec(query, ids...)
...
方法2、 sqlx內置了一個In()方法用於處理這種情況,可以使得對in的處理十分優雅。
其實該方法的實現和我們方法1的處理原理類似。
import (
"github.com/jmoiron/sqlx"
)
var ids []int
err := c.BindJSON(&ids)
...
query1, args, err := sqlx.In("delete from device where id in (?)", ids)
_, err = models.DB.Exec(query1, args ...)
...