Поиск…


Вступление

Функции в Go обеспечивают организованный, многоразовый код для выполнения набора действий. Функции упрощают процесс кодирования, предотвращают избыточную логику и упрощают выполнение кода. В этом разделе описывается декларация и использование функций, аргументов, параметров, операторов возврата и областей в Go.

Синтаксис

  • func () // тип функции без аргументов и никакого возвращаемого значения
  • func (x int) int // принимает целое число и возвращает целое число
  • func (a, b int, z float32) bool // принимает 2 целых числа, один float и возвращает логическое
  • func (префикс string, values ​​... int) // Функция «variadic», которая принимает одну строку и одно или несколько целых чисел
  • func () (int, bool) // функция возвращает два значения
  • func (a, b int, z float64, opt ... interface {}) (success bool) // принимает 2 целых числа, один float и одно или несколько число интерфейсов и возвращает с именем boolean value (которое уже инициализировано внутри функции )

Основная декларация

Простая функция, которая не принимает никаких параметров и не возвращает никаких значений:

func SayHello() {
    fmt.Println("Hello!")
}

параметры

Функция может опционально объявлять набор параметров:

func SayHelloToMe(firstName, lastName string, age int) {
    fmt.Printf("Hello, %s %s!\n", firstName, lastName)
    fmt.Printf("You are %d", age)
}

Обратите внимание, что тип firstName опущен, поскольку он идентичен lastName .

Возвращаемые значения

Функция может возвращать одному или нескольким значениям вызывающему абоненту:

func AddAndMultiply(a, b int) (int, int) {
    return a+b, a*b
}

Второе возвращаемое значение также может быть ошибкой var:

import errors

func Divide(dividend, divisor int) (int, error) {
    if divisor == 0 {
        return 0, errors.New("Division by zero forbidden")
    }
    return dividend / divisor, nil
}

Следует отметить две важные вещи:

  • Скобки могут быть опущены для одного возвращаемого значения.
  • Каждый оператор return должен предоставлять значение для всех объявленных возвращаемых значений.

Именованные возвращаемые значения

Возвращаемые значения могут быть назначены локальной переменной. Затем пустой оператор return может быть использован для возврата своих текущих значений. Это называется «голым» возвратом. Голые заявления о возврате должны использоваться только в коротких функциях, поскольку они ухудшают читаемость в более длинных функциях:

func Inverse(v float32) (reciprocal float32) {
    if v == 0 {
        return
    }
    reciprocal = 1 / v
    return
}

играть на детской площадке

//A function can also return multiple values
func split(sum int) (x, y int) {
    x = sum * 4 / 9
    y = sum - x
    return
}

играть на детской площадке

Следует отметить две важные вещи:

  • Скобки вокруг возвращаемых значений являются обязательными .
  • Необходимо всегда указывать пустой оператор return .

Литературные функции и замыкания

Простая буквальная функция, печать Hello! toddout:

package main

import "fmt"

func main() {
    func(){
        fmt.Println("Hello!")
    }()
}

играть на детской площадке


Буквальная функция, печатая аргумент str в stdout:

package main

import "fmt"

func main() {
    func(str string) {
        fmt.Println(str)
    }("Hello!")
}

играть на детской площадке


Литеральная функция, закрывающая переменную str :

package main

import "fmt"

func main() {
    str := "Hello!"
    func() {
        fmt.Println(str)
    }()
}

играть на детской площадке


Можно назначить литеральную функцию переменной:

package main

import (
    "fmt"
)

func main() {
    str := "Hello!"
    anon := func() {
        fmt.Println(str)
    }
    anon()
}

играть на детской площадке

Вариадические функции

VARIADIC функция может быть вызвана с любым числом аргументов задними. Эти элементы хранятся в срезе.

package main

import "fmt"

func variadic(strs ...string) {
     // strs is a slice of string
     for i, str := range strs {
         fmt.Printf("%d: %s\n", i, str)
     }
}

func main() {
     variadic("Hello", "Goodbye")
     variadic("Str1", "Str2", "Str3")
}

играть на детской площадке

Вы также можете дать кусочек вариационной функции, с ... :

func main() {
     strs := []string {"Str1", "Str2", "Str3"}

     variadic(strs...)
}

играть на детской площадке



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow