Вы можете ожидать, что разработчики прочитают предоставленный вами документ, и вы можете положиться на них, следуя установленным вами правилам.Да, ленивые разработчики время от времени бьют головой, но процесс разработки не обходится без необходимости учиться.Все нельзя сделать явным или принудительным, и все в порядке.
Если у вас есть экспортированный тип структуры Example
и вы предоставляете функцию конструктора NewExample()
, это явный признак того, что следует использовать NewExample()
построить значения Example
.Предполагается, что любой, кто пытается создать Example
вручную, будет знать, какие поля должны быть установлены, чтобы он работал.Цель всегда состоит в том, чтобы сделать нулевое значение полностью функциональным, но если это не может быть достигнуто, функция конструктора - идиоматический путь.
Это не редкость, в стандарте есть бесчисленное множество примеров.библиотека, например http.Request
, json.Encoder
, json.Decoder
, io.SectionReader
, template.Template
.
Вы должны убедиться, что если ваш пакет возвращает значения ваших структур, они должны (должны) быть правильно инициализированы.А также, если ожидается, что другие передадут значения созданных ими ваших структур, вы должны предоставить им простой способ создания допустимых значений ваших структур (функция конструктора).Являются ли значения пользовательских структур, которые другие разработчики создают сами, «допустимыми», это не должно вас беспокоить.