Функции языка Go
Функции — это базовые блоки кода, используемые для выполнения задачи.
В языке Go есть как минимум одна функция main().
Можно разделять различные функции с помощью функций; логически каждая функция выполняет заданную задачу.
Объявление функции сообщает компилятору имя функции, тип возвращаемого значения и параметры.
Стандартная библиотека Go предоставляет различные встроенные функции, которые доступны. Например, функция len() может принимать аргументы разных типов и возвращать длину этого типа. Если мы передаём строку, она возвращает длину строки; если мы передаём массив, она возвращает количество элементов, содержащихся в массиве.
Определение функции
Формат определения функций в Go следующий:
func function_name( [parameter list] ) [return_types] {
函数体
}
Разбор определения функции:
- func: функция объявляется с помощью ключевого слова func.
- function_name: имя функции, список параметров и тип возвращаемого значения составляют сигнатуру функции.
- список параметров: Список параметров. Параметры похожи на заполнители. При вызове функции можно передавать значения параметрам, и эти значения называются фактическими параметрами. Список параметров определяет типы параметров, порядок и количество параметров. Параметры необязательны, то есть функция может не содержать параметров.
- return_types: Тип возвращаемого значения. Функция возвращает список значений. return_types — это тип данных этого списка значений. Некоторые функции не нуждаются в возвращаемом значении; в этом случае return_types не обязателен.
- Тело функции: совокупность кода, определяющего функцию.
Пример
В следующем примере приведён код функции max(), которая принимает два целочисленных параметра num1 и num2 и возвращает максимум из этих двух параметров:
Пример
func max(num1, num2 int) int {
/* объявление локальных переменных */
var result int
if (num1 > num2) {
result = num1
} else {
result = num2
}
return result
}
Вызов функции
Когда вы создаёте функцию, вы определяете, что функция должна делать, и указанная задача выполняется путём вызова функции.
Вызов функции, передача аргументов функции и возврат значений, например:
Пример
import "fmt"
func main() {
/* Определить локальные переменные */
var a int = 100
var b int = 200
var ret int
/* Вызвать функцию и вернуть максимальное значение */
ret = max(a, b)
fmt.Printf( "Maximum value is : %d\n\n", ret )
}
/* Функция возвращает максимум из двух чисел */
func max(num1, num2 int) int {
/* Определить локальные переменные */
var result int
if (num1 > num2) {
result = num1
} else {
result = num2
}
return result
}
В приведенном выше примере функция max() вызывается в функции main(), и результат выполнения:
最大值是 : 200
Функции, возвращающие несколько значений
Функции Go могут возвращать несколько значений, например:
Пример
import "fmt"
func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap("Google", "Example")
fmt.Println(a, b)
}
Результат выполнения приведенного выше примера:
Example Google
Параметры функции
Если функция использует параметры, эти переменные можно назвать формальными параметрами функции.
Формальные параметры подобны локальным переменным, определенным внутри тела функции.
При вызове функции есть два способа передачи аргументов:
| Тип передачи | Описание |
|---|---|
| Передача по значению | Передача по значению означает копирование фактического параметра и передачу его в функцию при вызове функции, поэтому если параметр изменяется внутри функции, это не повлияет на фактический параметр. |
| Передача по ссылке | Передача по ссылке означает передачу адреса фактического параметра в функцию при её вызове. Изменения, внесённые в параметр внутри функции, затем повлияют на фактический параметр. |
По умолчанию в языке Go используется передача по значению, что означает, что фактические параметры не будут затронуты во время вызова.
Использование функций
| Использование функций | Описание |
|---|---|
| Функция как аргумент другой функции | После определения функции её можно передать как фактический параметр в другую функцию. |
| Замыкание | Замыкание — это анонимная функция, которую можно использовать в динамическом программировании. |
| Методы | Метод — это функция, содержащая получателя. |