Последовательный вызов в Go
Давайте теперь будем передавать результат одной функции параметром в
другую. В следующем примере мы сначала найдем квадрат числа 2,
а затем квадрат этого результата:
package main
import "fmt"
func square(n int) int {
return n * n
}
func main() {
res := square(square(2))
fmt.Println(res) // выведет 16
}
Функции не обязательно должны быть одинаковыми. Пусть square
возвращает квадрат числа, а cube возвращает куб числа. Возведем
2 в квадрат, а затем результат возведем в куб:
package main
import "fmt"
func square(n int) int {
return n * n
}
func cube(n int) int {
return n * n * n
}
func main() {
res := cube(square(2))
fmt.Println(res) // выведет 64
}
Пусть теперь add возвращает сумму двух чисел. Найдем сумму
квадрата числа 2 и квадрата числа 3:
package main
import "fmt"
func square(n int) int {
return n * n
}
func add(a, b int) int {
return a + b
}
func main() {
res := add(square(2), square(3))
fmt.Println(res) // выведет 13
}
Внутренний вызов выполняется первым, его значение подставляется как аргумент внешнего. Скобки задают этот порядок.
Пусть у вас есть функция, возвращающая кубический корень из числа, и
функция, округляющая дробь до трех знаков в дробной части. В файле
нужен import "math":
func root(num float64) float64 {
return math.Cbrt(num)
}
func norm(num float64) float64 {
return math.Round(num*1000) / 1000
}
С помощью этих функций найдите кубический корень из числа 2 и
округлите его до трех знаков в дробной части.
Напишите add и double, где double умножает число
на 2. Выведите double(add(2, 3)).
Напишите add и triple, где triple умножает число
на 3. Выведите triple от суммы 2 и 3.
Даны числа:
a := 4
b := 1
Напишите add и inc, где inc прибавляет 1.
Выведите inc(add(a, b)).