Оператор return

Оператор return в Go завершает выполнение текущей функции и передает управление обратно в вызывающий код. Если функция объявлена с типом возвращаемого значения, оператор return должен возвращать значение соответствующего типа. Для функций, которые возвращают несколько значений, return возвращает все значения в порядке их объявления. В случае функций без возвращаемого значения (void) оператор return может использоваться для досрочного выхода без указания значений.

Синтаксис

goreturn [значение_1, значение_2, ...]

Пример с одним возвращаемым значением

Давайте напишем функцию, которая вычисляет квадрат числа и возвращает результат:

gopackage main

import "fmt"

func square(x int) int {
  return x * x
}

func main() {
  res := square(5)
  fmt.Println(res)
}

Результат выполнения кода:

go25

Пример с несколькими возвращаемыми значениями

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

gopackage main

import "fmt"

func divide(a, b int) (int, error) {
  if b == 0 {
    return 0, fmt.Errorf("division by zero")
  }
  return a / b, nil
}

func main() {
  res, err := divide(10, 2)
  if err != nil {
    fmt.Println(err)
  } else {
    fmt.Println(res)
  }
}

Результат выполнения кода:

go5

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

В Go можно использовать именованные возвращаемые значения, что позволяет использовать оператор return без указания значений:

gopackage main

import "fmt"

func getPersonInfo() (name string, age int) {
  name = "John Doe"
  age = 30
  return
}

func main() {
  n, a := getPersonInfo()
  fmt.Println(n, a)
}

Результат выполнения кода:

go"John Doe" 30

Пример с досрочным возвратом

Оператор return может использоваться для досрочного выхода из функции в условных конструкциях:

gopackage main

import "fmt"

func checkValue(x int) string {
  if x < 0 {
    return "negative"
  }
  if x == 0 {
    return "zero"
  }
  return "positive"
}

func main() {
  fmt.Println(checkValue(-5))
  fmt.Println(checkValue(0))
  fmt.Println(checkValue(5))
}

Результат выполнения кода:

go"negative"
"zero"
"positive"

Пример использования return в функции без возвращаемого значения

Для функций без возвращаемого значения оператор return может использоваться без значений для досрочного завершения:

gopackage main

import "fmt"

func printMessage(msg string) {
  if msg == "" {
    fmt.Println("empty message")
    return
  }
  fmt.Println(msg)
}

func main() {
  printMessage("")
  printMessage("hello world")
}

Результат выполнения кода:

go"empty message"
"hello world"

Смотрите также

  • оператор func,
    который объявляет функции с возвращаемыми значениями
  • оператор if,
    который часто используется с оператором return для проверки условий
  • оператор switch,
    который также может использовать return для выхода из функции
  • оператор defer,
    который выполняется перед фактическим выходом из функции