Jika Anda memiliki peta dengan nama dan nilai bidang seperti ini:
m := map[string]interface{}{"UserID": 1234, "Age": 18}
maka Anda dapat membuat kueri seperti ini:
var values []interface{}
var where []string
for _, k := range []string{"userId", "gender", "age", "name", "height", "weight", "ethnicity"} {
if v, ok := m[k]; ok {
values = append(values, v)
where = append(where, fmt.Sprintf("%s = ?", k))
}
}
r, err := db.QueryRow("SELECT name FROM users WHERE " + strings.Join(where, " AND "), values...)
Ini tidak rentan terhadap injeksi SQL karena placeholder digunakan untuk bagian kueri di luar kontrol langsung aplikasi.
Jika kunci peta diketahui sebagai nama bidang yang diizinkan, gunakan ini:
var values []interface{}
var where []string
for k, v := range m {
values = append(values, v)
where = append(where, fmt.Sprintf("%s = ?", k))
}
r, err := db.QueryRow("SELECT name FROM users WHERE " + strings.Join(where, " AND "), values...)