Я пытаюсь создать API с драйвером базы данных / sql и mysql, который будет считывать данные на основе параметров URL.
Примерно так
myapi.com/users?columns=id,first_name,last_name,country&sort=desc&sortColumn=last_name&limit=10&offset=20
Я знаю, как получить все столбцы илитолько определенные столбцы, когда это определено в структуре.Но я хочу знать, возможно ли получить столбцы из URL и вместо предопределенной структуры сохранить их на карту, а затем просто сканировать эти столбцы.
У меня есть рабочий код, который будет получать данные из конечной точки выше, только если количество столбцов одинаковокак в структуре.Например, если я удаляю country
, я получаю сообщение об ошибке, что Scan
ожидает 4 параметра, но дается 3.
Мне не нужен конкретный код, только некоторые указания, так как я изучаю Go, а мой фон - PHPгде это легче сделать.
Обновление
Благодаря ответам у меня есть частично рабочее решение.
Вот код:
cols := []string{"id", "first_name", "last_name"}
vals := make([]interface{}, len(cols))
w := map[string]interface{}{"id": 105}
var whereVal []interface{}
var whereCol []string
for k, v := range w {
whereVal = append(whereVal, v)
whereCol = append(whereCol, fmt.Sprintf("%s = ?", k))
}
for i := range cols {
vals[i] = new(interface{})
}
err := db.QueryRow("SELECT "+strings.Join(cols, ",")+" FROM users WHERE "+strings.Join(whereCol, " AND "), whereVal...).Scan(vals...)
if err != nil {
fmt.Println(err)
}
b, _ := json.Marshal(vals)
fmt.Println(string(b))
Это должно запросить SELECT id, first_name, last_name FROM users WHERE id = 105;
Но как мне получить данные для правильного объекта json?Теперь он выводит строки, закодированные в base64 следующим образом.
[105,"Sm9obm55","QnJhdm8="]