Это шестая статья из моей еженедельной серии Learning Go. На прошлой неделе я рассмотрел типы Struct и Interface. На этой неделе я буду говорить об объявлениях функций, аргументах, параметрах и анонимных функциях.

Обзор

Роль, которую функции играют в Go или в любом другом языке программирования, одинакова. Они существуют для выполнения вычислений, выборки данных, агрегирования и многих других утилит. Несколько замечаний о функциях, прежде чем мы перейдем к нескольким примерам:

  • Сохраняйте функции небольшими и модульными
  • Параметры – это значения, ожидаемые функцией.
  • Аргументы — это значения, которые передаются при выполнении функции.
  • Все в Go передается по значению

Объявление функции

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

Прежде чем мы перейдем к примеру, позвольте мне разбить объявление функции на четыре части:

  • receiver — указывает тип параметров, которые получает функция.
  • идентификатор — имя функции.
  • параметры — значения, которые функция ожидает при вызове (выполнении)
  • типы возвращаемых значенийтип значения, которое возвращает функция.

Небольшое примечание: получатель не требуется. Они используются в функциях получателя, которые мы рассмотрим позже. Следует также помнить, что параметры и типы возвращаемых значений являются необязательными.

Если ваша функция не ожидает получения каких-либо значений при вызове, вы можете оставить параметры пустыми.

Точно так же, если ваша функция не возвращает значение, вам не нужен возвращаемый тип.

Давайте сначала рассмотрим базовый пример объявления функции без типа получателя, параметров или возвращаемого типа.

  • под func main мы объявляем новую функцию, используя ключевое слово func
  • затем мы даем этой функции идентификатор sayHello
  • в круглых скобках () находятся ваши параметры. У нас их нет в этом примере; тем не менее, вы все равно должны иметь их
  • мы выполняем эту функцию внутри main, просто записывая идентификатор функции с набором скобок ()

Аргументы и параметры

Зачем нам нужны скобки сразу после нашего идентификатора? Вот как вы должны передавать значения в свою функцию. Эти значения называются аргументами. Если у нас нет никаких значений для передачи, мы все равно должны написать набор круглых скобок, это позволит компилятору понять, что мы хотим выполнить эту функцию и что у нее нет аргументов.

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

  • как и в первом примере, мы создаем новую функцию, используя ключевое слово func с идентификатором myName.
  • сразу после нашего идентификатора функции myName вы увидите, что мы поместили s string в круглые скобки
  • s — это значение, которое мы получим от этой функции, а string говорит нам, что s будет типа string
  • внутри main пишем идентификатор нашей функции, myName
  • сразу после этого мы помещаем значение ”martin” типа string в круглые скобки, это аргумент функции
  • myName затем выполняется и печатает ”hello martin”

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

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

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

  • ниже func main мы объявляем функцию, используя ключевое слово func
  • дайте идентификатор sayHello
  • напишите один параметр s типа string между скобками
  • затем напишите тип возвращаемого значения string
  • используя ключевое слово return, мы return получаем значение s из этой функции.
  • внутри func main мы объявляем новую переменную n, которая равна возвращаемому значению функции sayHello
  • после выполнения функции мы печатаем значение n

Несколько возвращаемых значений

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

  • мы объявляем новую функцию, используя ключевое слово func
  • дайте идентификатор isAJedi
  • между первым набором скобок мы пишем два параметра: s1 и s2, оба типа string
  • в следующем наборе скобок указаны наши типы возвращаемых значений: string и bool
  • в первой строке мы объявляем переменную a и присваиваем ей значение string, которое включает значения s1 и s2
  • далее мы объявляем переменную b и присваиваем ей значение true типа bool
  • после ключевого слова return пишем переменные a и b
  • наши возвращаемые типы — string и bool, порядок имеет значение; поэтому мы не можем вернуть значение bool, а затем значение string
  • внутри func main мы объявляем x и y как переменные, которым будет присвоено значение каждого возвращаемого значения из isAJedi
  • когда мы печатаем, мы видим, что значение x равно obi wan kenobi, а значение y равно true

Анонимные функции

Как мы уже видели, существует множество способов создания и использования функции. анонимная функция используется, когда вам не нужна функция с идентификатором:

  • внутри func main мы используем ключевое слово func с
  • так как у нас нет никаких параметров, мы пишем пустые скобки ()
  • чтобы компилятор знал, что нужно заглянуть внутрь этой функции, в тело функции мы пишем открывающую скобку {
  • внутри тела функции, используя пакет fmt, мы печатаем string I’m anonymous!
  • чтобы обозначить, что наше тело функции закрыто, мы пишем закрывающую скобку } в следующей строке
  • после закрывающей скобки } вы заметите, что у нас есть набор пустых скобок (), как упоминалось ранее, так мы говорим компилятору выполнить эту функцию
  • поскольку у нас нет аргументов, эти скобки пусты ()

Вкратце

Надеюсь, вам было интересно узнать об объявлениях функций, аргументах, параметрах и анонимных функциях. О функциях в Go можно узнать еще очень много, и я с радостью поделюсь с вами в ближайшие недели. На следующей неделе мы углубимся в функциональные выражения, обратные вызовы и рекурсивные функции. Не могу дождаться, тогда увидимся!