Функции могут возвращать результат. Для этого нужно после списка параметров функции указать тип возвращаемого результата. А в теле функции использовать оператор return, после которого указывается возвращаемое значение:
func имя_функции (список_параметров) тип_возвращаемого_значения { выполняемые_операторы return возвращаемое_значение }
Например, мы хотим возвратить из функции сумму двух чисел:
package main import "fmt" func main() { var a = add(4, 5) // 9 var b = add(20, 6) // 26 fmt.Println(a) fmt.Println(b) } func add(x, y int) int { return x + y }
Функция add возвращает значение типа int, поэтому данный тип указан после списка параметров. В самой функции после оператора return указывается возврашаемое значение.
При этом данное значение может быть значением переменной, литералом, либо же, как в данном случае, результатом операции или вызова функции. То есть выражение x + y
определяет возвращаемое значение.
Поскольку функция возвращает значение, то при вызове функции мы можем получить это значение и передать его переменной:
var a = add(4, 5) // 9 var b = add(20, 6) // 26
Возвращаемый результат может быть именован:
func add(x, y int) (z int) { z = x + y return }
В скобках после списка параметров фактически определяется переменная, значение которой будет возвращаться. В конце функции ставится оператор return, но теперь необязательно после этого оператора ставить возвращаемое значение. Фактически мы также могли бы написать:
func add(x, y int) int { var z int = x + y return z }
В Go функция может возвращать сразу несколько значений. В этом случае после списка параметров указывается в скобках список типов возвращаемых значений. А после оператора return располагаются через запятую все возвращаемые значения:
package main import "fmt" func main() { var age, name = add(4, 5, "Tom", "Simpson") fmt.Println(age) // 9 fmt.Println(name) // Tom Simpson } func add(x, y int, firstName, lastName string) (int , string) { var z int = x + y var fullName = firstName + " " + lastName return z, fullName }
Функция add принимает четыре параметра: два числа и две строки. Возвращает число (значение типа int) и строку. Возвращаемые значения указаны после оператора return.
Поскольку функция теперь возвращает два значения, то при вызове этой функции мы можем присвоить ее результат двум переменным:
var age, name = add(4, 5, "Tom", "Simpson")
Первое возвращаемое значение передается первой переменной age, а второе значение передается второй переменной name.
Альтернативный способ передачи переменным результатов функции:
age, name := add(4, 5, "Tom", "Simpson")
И также в даном случае можно было бы использовать именованные результаты:
func add(x, y int, firstName, lastName string) (z int, fullName string) { z = x + y fullName = firstName + " " + lastName return }