Mysql
 sql >> Database >  >> RDS >> Mysql

Golang MySQL interroga una quantità indefinita di argomenti utilizzando l'operatore IN

Stmt.Query() ha un parametro variadico:

func (s *Stmt) Query(args ...interface{}) (*Rows, error)

Ciò significa che puoi usare i puntini di sospensione ... per passare un valore di slice come valore del parametro variadic, ma tale slice deve essere di tipo []interface{} , ad esempio:

var args []interface{}
for _, v := range r.Form["type"] {
    t, _ := strconv.Atoi(v)
    args = append(args, t)
}

// ...

rows, err := stmt.Query(args...)

In alternativa, è possibile precompilare la query SQL ed eseguirla senza passare argomenti di query, ad esempio vedere Clausola Go e IN in Postgres .