Задать вопрос
@dodrator

В каких случаях использовать импортируемые поля в структуре go?

Я слышал, что желательно делать поля неимпортируемыми и использовать геттеры и сеттеры, dependency injection чтобы передавать данные в другие пакеты. Зачем тогда нужны импортируемые поля и какие данные можно делать импортируемыми?
  • Вопрос задан
  • 121 просмотр
Подписаться 1 Простой Комментировать
Ответ пользователя DollyPapper К ответам на вопрос (3)
DollyPapper
@DollyPapper
Смысл делать поля экспортируемыми есть в очень редких случаях. Один из таких случаев например маршалинг (json/yaml/etc), без экспортируемых полей библиотека просто не сможет засеттить значение в поле. Другие дело обстоит с сущностями (обьектами/структурами вашей предметной области). В случае сущности эта самая сущность должна скрывать свое внутренее состояние и не позволять изменять его извне. Приведу банальный пример:
type User struct {
    Name string
    Age    int
}

И сеттеры геттеры к ней.

Далее допустим есть бизнес правило, что у вас можно регистрировать пользователей строго старше 18 лет. Как вы будете контролировать, что нельзя назначить возраст < 18 лет? Да никак, с экспортируемыми полями это невозможно. Почитать на эту тему можно погуглив про инкапсуляцию и information hiding. В данном конкретном случае геттеры и сеттеры наверное будут более подходящими. В сеттерах можно прописать условие, что возраст должен быть строго больше 18 лет. Однако может быть и такой случай, что сущность не должна вообще более изменяться после создания. Для этого в ООП языках, чтобы задать первоначальные значения существуют конструкторы. В го нет конструкторов, т.к. нет понятия класса, но нам ни что не мешает создать обычную функцию порождающую обьект юзера, и засеттить значения возраста и имени в этой фкнции.
Ответ написан
Комментировать