Чтобы указать, что элемент не найден, вы можете либо вернуть указатель на элемент (который будет nil
, если не найден), либо использовать два возвращаемых значения с ошибкой или логическое значение.
Например, поиск по карте возвращает пару value, ok
. Пример из spe c:
Индексное выражение на карте a типа map [K] V, используемое при назначении или инициализации специальной формы
v, ok = a[x]
v, ok := a[x]
var v, ok = a[x]
дает дополнительное нетипизированное логическое значение. Значение ok равно true, если ключ x присутствует на карте, и false в противном случае.
В вашем случае это будет:
func (registerDevice *RegistredDevices) GetById(id int) (Device, bool) {
for _, device := range registerDevice.AllDevices {
if device.AssignedId == id {
return device, true
}
}
return Device{}, false
}
А затем:
if currentDevice, ok := registredDevices.GetById(1); ok {
// found. use currentDevice
} else {
// not found
}