Именованные результаты в Go
Давайте теперь будем давать результатам имена. Тогда пустой
return отдает их текущие значения. Имена пишут в скобках после
параметров вместе с типами, а в теле им присваивают как обычным
переменным.
Частное и остаток от деления запишем в именованные результаты функции
func:
package main
import "fmt"
func func(a, b int) (q int, r int) {
q = a / b
r = a % b
return
}
func main() {
q, r := func(10, 3)
fmt.Println(q, r) // выведет 3 1
}
Команда return без выражений возвращает q и r
после присваивания. Имена результатов видны только внутри функции. При
вызове по-прежнему передают значения по порядку, без имен аргументов.
Если типы результатов одинаковые и стоят рядом, запись можно
сократить. Функция func делит число на две части:
package main
import "fmt"
func func(n int) (lo, hi int) {
lo = n / 2
hi = n - lo
return
}
func main() {
a, b := func(10)
fmt.Println(a, b) // выведет 5 5
}
Даны числа:
a := 14
b := 5
Напишите функцию func с именованными результатами q и
r для деления a на b. Используйте пустой
return. Выведите оба значения.
Напишите функцию func с параметром n и именованными
lo, hi, где lo равно 0, а hi равно
n. Верните пару пустым return и выведите ее для
7.
Скажите, что вернет голый return после присваивания именованным
результатам.