Методы или функции? Функции или методы?

Исходя из Java или любого другого объектно-ориентированного языка, первым побуждением было использовать структуры и методы для всего, поскольку поведение объектов всегда определялось методами. Но верен ли такой подход в Голанге, где у нас есть как функции, так и методы?

Где нам нужно использовать методы и где нам нужны функции?

Давайте сначала посмотрим, что такое функция и что такое метод в Golang.

Функция принимает несколько параметров в качестве входных и выдает некоторые выходные данные. Для одного и того же ввода функция всегда будет производить один и тот же вывод. Значит, не зависит от государства. Тип передается функции как аргумент.

Метод в Go - это функция, которая привязана к определенному аргументу (типу) получателя. Он определяет поведение типа и должен использовать состояние типа.

Но если у нас нет состояния внутри структуры, разве мы не должны вообще определять методы? Ответ - мы можем, но это в основном для логической группировки методов для этого конкретного типа.

Основное правило состоит в том, что не следует определять методы, если

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