Функции в Go объявляются через ключевое слово func
:
func multiply(x int, y int) int {
return x * y
}
Объявление функции состоит из следующих частей:
-
ключевое слово
func
-
название функции
multiply
-
входящие аргументы
(x int, y int)
. Тип аргументов пишется после названия переменной. Если несколько аргументов подряд имеют одинаковый тип, то можно написать сокращенно(x, y int)
-
тип возвращаемого значения
int
-
тело функции
{ return x * y }
Функции именуются в camelCase. Если первая буква заглавная, то функция экспортируемая (публичная) и доступна в других пакетах. Функции с маленькой буквы используются только в рамках текущего пакета:
package math
// публичная функция, можно вызвать извне как math.Multiply(5,7)
func Multiply(x int, y int) int {
...
}
// приватная функция, извне не вызвать
func divide(x int, y int) int {
...
}
Из одной функции можно возвращать несколько значений. Чаще всего это используется для возвращения ошибок:
package math
import "errors"
func divide(x, y int) (int, error) {
if y == 0 {
return 0, errors.New("cannot divide on zero")
}
return x / y, nil
}
Возвращаемые значения могут быть именованными:
func multiply(x, y int) (res int) {
res = x * y
return
}
Использовать именованные возвращаемые аргументы — плохая практика. На это есть несколько причин:
-
увеличенное расстояние между объявлением и использованием переменной ведет к сложности в чтении и понимании кода
-
переменная может быть несколько раз переопределена в теле функции, что приводит к неожиданному поведению
-
пустой
return
неявно возвращает аргументы
Естественно, код состоит не только из функций: чаще всего используется множество внешних библиотек. Чтобы использовать внешнюю функцию, нужно указать пакет и через . вызвать публичную функцию. Например:
import "fmt"
func myPrint(msg string) {
// пакет.функция
fmt.Println(msg)
}
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты