идиоматическая реализация сложных структурных иерархий в Go
go отсутствие наследства и поддержки для внедрения делает представление сложных структурных иерархий нецидиальными. Использование компилятора GO в реализации AST в ее реализации AST подняло вопросы о его эффективности.
понимание пустых методов
, в то время как не существенные, пустые методы служат двум ключевым целям:
рассмотрим следующую иерархию: объект. -не поддается ----Здание ----Гора -мостовой ----Машина ---- Bike
реализация объекта:
type объект interface { объект() } Тип объекта struct {} func (o *objectImpl) object () {}
недвижимость. Объект недвижимый () } тип недвижимости intruct { ObjectImpl // Реализация встроенного объекта } func (i *isemovableimpl) isemovable () {}
Object --Immovable ----Building ----Mountain --Movable ----Car ----Bike
Реализация здания:
типа строительства struct { Неподвижная внедренная реализация. // Дополнительные поля, специфичные для здания }Object --Immovable ----Building ----Mountain --Movable ----Car ----Bike
Movable реализация:
type votable interface { Объект подвижный () } Тип MovableImpl struct { ObjectImpl // Реализация встроенного объекта } func (m *movableimpl) movable () {}Object --Immovable ----Building ----Mountain --Movable ----Car ----Bike
реализация автомобиля:
type Car struct { MovableImpl // Встроенная подвижная реализация // дополнительные автомобильные поля }Object --Immovable ----Building ----Mountain --Movable ----Car ----Bike
Пример использования:
// Строительство не может быть назначено переменной переменной, потому что она не реализует подвижный интерфейс. var Movable Movable = Building {} // Тем не менее, это может быть назначено переменной типа объекта, поскольку как недвижимый, так и подвижный объект реализации. var object = building {}Object --Immovable ----Building ----Mountain --Movable ----Car ----Bike
Преимущества внедрения:
type Car struct { MovableImpl // Embedded Movable implementation // Additional Car-specific fields }
Clear Delination структурных отношений через встроенные структуры. Упрощение реализации.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3