Методы или функции? Функции или методы?
Исходя из Java или любого другого объектно-ориентированного языка, первым побуждением было использовать структуры и методы для всего, поскольку поведение объектов всегда определялось методами. Но верен ли такой подход в Голанге, где у нас есть как функции, так и методы?
Где нам нужно использовать методы и где нам нужны функции?
Давайте сначала посмотрим, что такое функция и что такое метод в Golang.
Функция принимает несколько параметров в качестве входных и выдает некоторые выходные данные. Для одного и того же ввода функция всегда будет производить один и тот же вывод. Значит, не зависит от государства. Тип передается функции как аргумент.
Метод в Go - это функция, которая привязана к определенному аргументу (типу) получателя. Он определяет поведение типа и должен использовать состояние типа.
Но если у нас нет состояния внутри структуры, разве мы не должны вообще определять методы? Ответ - мы можем, но это в основном для логической группировки методов для этого конкретного типа.
Основное правило состоит в том, что не следует определять методы, если
- Зависимости от государства не требуется
- Вы можете выполнить эту функцию для любого типа, который реализует определенный интерфейс, что означает, что вам не нужно ограничивать эту функцию, чтобы она принадлежала определенному типу.