Функции и методы
init() и main()
Любой фрагмент программного кода на языке Go должен быть включен в пакет, а каждая программа должна иметь пакет main с функцией main().
Пакеты на языке Go могут иметь функции init() - они все выполнятся перед main(). Причем, функции init, как и main, можно не вызывать специально.
Функции
Неопределенное количество аргументов
может быть функция с неопределенным количеством параметров
Именованные возвращаемыее значения
Возвращаемые значения могут быть именованные и неименованные. Смешивать нельзя. Именованные возвращаемые значения рекомендуется использовать только в коротких функциях (чтобы не ухудшать читаемость кода).
Пример:
На текущий момент компиляторы не способны распознать return в секции default или else безусловном. Принято в таких случаях использовать panic("unreachable")
Передача параметров из одной функции в другую
Необязательные параметры
В Go нет поддержки необязательных параметров. Однако, этого можно добиться использованием структур, которые инициализируются по умолчанию.
Выбор функции во время выполнения
Ветвление с помощью отображений и ссылок на функции
Методы
Примеры
Пример метода, переопределяющего функцию len для типа Stack. Имя stack (может быть любым) в терминах Go называется приемником (в других языках это имя фиксировано - this, self,..).
Если метод должен изменять значение приемника, его необходимо определить как указатель. В противном случае, в метод передается копия объекта.
Возвращение нескольких значений
Ограничения
Имена всех методов должны быть уникальны в пределах одного типа. Следовательно, нельзя создать два одинаковых метода - один для значения, другой для указателя.
Отсутствует поддержка перегруженных методов. Один способов реализовать подобие перегруженных методов - использовать методы с переменным числом аргументов, однако в Go принято использовать функции с уникальными именами. Например тип strings.Reader представляет три разных метода чтения: strings.Reader.Read(), strings.Reader.ReadByte(), strings.Reader.ReadRune().
Множество методов значения - все методы этого типа, принимающие приемник по значению. Множество методов указателя - все методов этого типа, принимающий приемник по значению и по указателю!
Переопределение методов
Конструкторы
Конструкторы - это функции, возвращающие проинициализированне значение. Их принято называть New...
Анонимная функция (замыкания)
Пример:
Для чего используются
Создание функций-оберток
Создание фабричных функций
фабричные функции - такие функции, которые возвращают другие функции
Last updated