2016-01-02 2 views
0

Я запрашиваю базу данных mysql в функции GO и хочу возвращать пары ключевых значений на карте, но не могу понять, как это сделать. До сих пор я эта функция:GO: Возвращает карту из SQL-запроса

func GetData(callIds []string) map[string]Records { 
    //db insert 
    db, err := sql.Open("mysql", mySql) 
    if err != nil { 
     fmt.Printf(err.Error()) 
    } 
    defer db.Close() 
    //db query 
    var foo string 
    err = db.QueryRow("select foo from bardata where callId = %v", 1).Scan(&foo) 
    if err != nil { 
     fmt.Printf(err.Error()) 
    } 
    fmt.Println(foo) 

    return nil 

Я хочу вернуть карту с ключом является callId и значения будучи foo для каждой строки, возвращенной из запроса.

+0

У вас есть функция, возвращающая 'map [string] Records', но вещь, которую вы извлекаете из БД, представляет собой' string', а не 'Records', что бы это ни было. Что там должно произойти? – hobbs

ответ

1

Во-первых, вам нужно создать свой запрос. Как бы то ни было, вы даже не используете свой ввод функции. Так как у нас есть переменное число аргументов, нам нужно немного поработать, чтобы построить нужное количество заполнителей:

query := `select callid, foo from bardata where callid in (` + 
    strings.Repeat(`?,`, len(callIds) - 1) + `?)` 

затем выполнить с значениями, передаваемыми в:

rows, err := db.Query(query, callIds...) 
if err != nil { 
    // handle it 
} 
defer rows.Close() 

затем собрать Результаты:

ret := map[string]string{} 
for rows.Next() { 
    var callid, foo string 
    err = rows.Scan(&callid, &foo) 
    if err != nil { 
     // handle it 
    } 
    ret[callid] = foo 
} 

return ret 

Предостережения:

  1. Это приведет к ошибке несоответствия заполнителя, если callIds - пустой фрагмент. Если это возможно, вам необходимо обнаружить его и обработать его отдельно (возможно, путем возврата ошибки или пустой карты - запрос БД не должен быть необходимым).

  2. Это возвращает map[string]string, где значения имеют значение «foo». В вашем вопросе у вас есть функция, возвращающая map[string]Records, но нет никакой информации о том, что может быть Records или как его получить.

  3. Возможно, вы захотите обработать иначе, чем другие ошибки.

Смежные вопросы