Go — это язык без классов, и я не жалуюсь на это. На самом деле, я не жалуюсь на многие вещи в Golang, о которых я думал до того, как начал программировать на Go.
Go плавно справляется со многими вещами и предоставляет пользователю относительно небольшой API по сравнению с другими языками, скажем, Rust. Тем не менее, этот дизайн настолько хорошо продуман и спроектирован, что вы всегда можете использовать это в своих интересах и повысить его эластичность.
Если вы пришли из ООП-языка, go может показаться вам немного странным. Но не волнуйтесь, я постараюсь сделать все возможное, чтобы помочь.
‹Что такое функция приемника/›
Первое, с чем нам нужно ознакомиться, — это метод. Метод — это не то, что мы знаем из таких языков, как Python. Метод, по сути, похож на функцию, но он получает специальный аргумент, который является получателем.
Получатель, с другой стороны, по сути является просто типом, который может напрямую вызывать функцию. Метод состоит из ключевого слова func, аргумента получатель и тела функции.
Общая настройка, как правило, состоит из трех шагов.
- Создайте тип. Гипотетически это похоже на создание переменных класса Python.
- Создайте геттер. Это берет аргументы из типа и выдает тип. Гипотетически это похоже на создание конструктора Python.
- Создайте метод. Что ж, это похоже на методы Python, которые мы вызываем из объектов.
‹Посмотреть в действии/›
Остерегайтесь комментариев.
Наш тип представляет собой структуру с именем Rig и имеет 3 поля. Каждый раз, когда я хочу создать новую установку, функция NewRig будет обрабатывать входные данные и отправлять их в структуру для заполнения. В конце концов, он вернет новый риг, который мы только что создали.
Функция получателя получает структуру и теперь является связанной с ней функцией. Каждый раз, когда создается новый риг, он будет упакован функцией MyRig
, которая пока мало что делает :)
инициализируем.
Поскольку я запускаю 2 строки кода выше в другом месте, я добавляю функцию NewRig с именем пакета, с которым она была связана.
Бежим с go run main.go:
Вуаля! Теперь каждый раз, когда я создаю новую установку, я могу распечатать это, а также привязать новые функции получателя к своей структуре!
Надеюсь, вам понравилось. До скорого!