Не могу понять два возврата из функции - PullRequest
0 голосов
/ 02 марта 2020

Я знаю, Go может возвращать несколько значений из одной функции / метода, но я не могу понять, ГДЕ значения возвращаются из.

ok, err := DB.SelectWithWhere(d, goqu.Ex{
    "location": id,
}).Limit(1).ScanStruct(d)

SelectWithWhere возвращает только одно значение.

func (s *SqlDB) SelectWithWhere(m models.Model, e goqu.Expression, args ...interface{}) *goqu.SelectDataset {
    ds := s.goqu.From(m.Table()).Where(e)
    if len(args) > 0 {
        ds = ds.Select(args...)
    }
    return ds //Single Return
}

Возвращается ложное значение ok, и это неправильно, поскольку он находит результат из базы данных, значения хранятся в структуре d.

Кто-нибудь может сказать мне, почему ok возвращается как ложное и ГДЕ происходит второе возвращаемое значение?

Я нашел:

ScanStruct

Сканирует строку в фрагмент структуры, возвращает false, если строка не найдена

Можно ли вернуть 1 значение из функции SelectWithWhere, а другое из ScanStruct?

1 Ответ

3 голосов
/ 02 марта 2020

SelectWithWhere возвращает одно значение, которое затем используется в качестве получателя для Limit(1). Это возвращает одно значение, которое используется в качестве получателя для ScanStruct, которое возвращает два значения. Ваш код может быть переписан как:

x:=DB.SelectWithWhere(d, goqu.Ex{"location": id})
y:=x.Limit(1)
ok, err:=y.ScanStruct(d)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...