103 lines
3.1 KiB
Markdown
103 lines
3.1 KiB
Markdown
|
---
|
|||
|
title: Go Functions
|
|||
|
localeTitle: Функции Go
|
|||
|
---
|
|||
|
## Функции Go
|
|||
|
|
|||
|
Функция принимает ноль или более параметров любого типа, выполняет некоторую логику с ними и может возвращать одно или несколько значений. Синтаксис функции Голанга:
|
|||
|
|
|||
|
```go
|
|||
|
func sum(parameter1 int64, parameter2 int64) int64 {
|
|||
|
return parameter1+parameter2
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
Здесь имя функции `add` . Он принимает параметры, `parameter1` и `parameter2` типа `int64` и возвращает еще одну int64, сумму двух параметров.
|
|||
|
|
|||
|
### Вернуть
|
|||
|
|
|||
|
По достижении `return` функция выходит без выполнения большего количества кода.
|
|||
|
|
|||
|
```go
|
|||
|
func sum(parameter1 int64, parameter2 int64) int64 {
|
|||
|
return parameter1+parameter2
|
|||
|
// Unreachable code
|
|||
|
fmt.Printf("Don't print me")
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### Вызов функции
|
|||
|
|
|||
|
Вышеупомянутая функция будет вызвана так:
|
|||
|
|
|||
|
```go
|
|||
|
sum(4, 5)
|
|||
|
```
|
|||
|
|
|||
|
Значение этого выражения равно 9.
|
|||
|
|
|||
|
### Тип параметра Omit
|
|||
|
|
|||
|
Если два или более последовательных параметров одного типа, это может быть указано только один раз.
|
|||
|
|
|||
|
```go
|
|||
|
function foo(x, y, z int64, name string) {
|
|||
|
fmt.Printf("%d %d %d %s", x, y, z, name)
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
Здесь `x` , `y` и `z` имеют тип `int64` , а `name` - это строка.
|
|||
|
|
|||
|
### Возврат нескольких значений
|
|||
|
|
|||
|
Функция может возвращать ноль или более значений. Чтобы ничего не возвращать, опустите возвращаемый тип:
|
|||
|
|
|||
|
```go
|
|||
|
function helloWorld() {
|
|||
|
fmt.Printf("Hello world!")
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
Чтобы вернуть одно значение, укажите его тип:
|
|||
|
|
|||
|
```go
|
|||
|
function getHelloWorld() string {
|
|||
|
return "Hello world!"
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
Чтобы вернуть более одного значения, укажите их типы, завернутые в `()` и разделенные запятыми:
|
|||
|
|
|||
|
```go
|
|||
|
function getHelloWorldAndBestLanguage() (string, string) {
|
|||
|
return "Hello world!", "Golang"
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
Чтобы получить эти значения, просто объявите переменные, разделенные запятыми, следующим образом:
|
|||
|
|
|||
|
```go
|
|||
|
helloWorld, bestLanguage := getHelloWorldAndBestLanguage()
|
|||
|
// helloWorld == "Hello world!"
|
|||
|
// bestLanguage == "Golang"
|
|||
|
```
|
|||
|
|
|||
|
### Голые возвращения
|
|||
|
|
|||
|
Вы можете указать типы возврата, чтобы вам не нужно передавать переменную в оператор return:
|
|||
|
|
|||
|
```go
|
|||
|
func duplicate(s string) (first, second string) {
|
|||
|
first = s
|
|||
|
last = s
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
func main() {
|
|||
|
fmt.Println(split("Hello world!")) // ("Hello world!", "Hello world!")
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
#### Дополнительная информация:
|
|||
|
|
|||
|
https://tour.golang.org/basics/4
|