Czego GoLANG chce dla drugiego parametru w tym zapytaniu SQL? Próbuję użyć wyszukiwania IN w postgres
stmt, err := db.Prepare("SELECT * FROM awesome_table WHERE id= $1 AND other_field IN $2")
rows, err := stmt.Query(10, ???)
Czego oczekuje:
SELECT * FROM awesome_table WHERE id=10 AND other_field IN (this, that);
1 odpowiedź
Kwerenda wymaga po prostu varargs
, aby zastąpić parametry w sql, więc w twoim przykładzie po prostu zrób :
rows, err := stmt.Query(10)
powiedzmy, że ten i drugi przykład byłyby dynamiczne, wtedy musiałbyś zrobić to w ten sposób:
stmt, err := db.Prepare("SELECT * FROM awesome_table WHERE id=$1 AND other_field IN ($2, $3)")
rows, err := stmt.Query(10,"this","that")
Jeśli masz zmienne argumenty dla części „IN”, możesz to zrobić tak:
package main
import "fmt"
import "strings"
func main() {
stuff := []interface{}{"this", "that", "otherthing"}
sql := "select * from foo where id=? and name in (?" + strings.Repeat(",?", len(stuff)-1) + ")"
fmt.Println("SQL:", sql)
args := []interface{}{10}
args = append(args, stuff...) fakeExec(args...)
}
func fakeExec(args ...interface{}) {
fmt.Println("Got:", args)