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
							 |