В Go возвращаемые параметры могут быть названы (иметь имена) и использоваться как обычные переменные. Когда функция возвращается, они используются как возвращаемые значения.
func f() (i int, s string) {
i = 17
s = "abc"
return // то же самое что и return i, s
}
Именованные возвращаемые параметры инициализируются своими нулевыми значениями.
Имена не являются обязательными, но могут послужить хорошей документацией. Правильно используемые именованные возвращаемые параметры также могут помочь сделать код более точным и чистым.
Пример
Эта версия io.ReadFull, взятая из Эффективный Go, эффективно использует их.
// ReadFull читает ровно len(buf) байтов из r в buf.
// Возвращается количество скопированных байтов и ошибка,
// если было прочитано меньше байтов.
func ReadFull(r Reader, buf []byte) (n int, err error) {
for len(buf) > 0 && err == nil {
var nr int
nr, err = r.Read(buf)
n += nr
buf = buf[nr:]
}
return
}
Код является и более простым и понятным, с именованными возвращаемыми значениями, которые правильно инициализированы и привязаны к простому return.
Читайте также:
Комментариев нет:
Отправить комментарий