Вы не альясинга ничего и селекторы относятся к множеству вещей, которые можно ссылаться на тип, используя точечную нотацию. Вы используете концепцию, называемую вложением, obj1
вставляет obj2
. obj1Selector
имеет одно поле под названием selector
типа obj2
. И псевдоним будет выглядеть так; type obj3 obj2
, который объявляет obj3
в качестве псевдонима для obj2
.
Это нарушает механизм продвижения Go? Извините, но вся ваша идея, как это работает, не зависит от вас. obj1Selector
не вставляет тип obj2
и поэтому не имеет полей/методов от obj2
'promoted', obj1
вставляет obj2
и, следовательно, имеет свои поля/методы 'promotioned'. obj1Selector
не реализует этот интерфейс, obj1Selector.selector
.
Зачем мне вставлять? Ну, это несколько эквивалентно наследованию или, по крайней мере, обеспечивает аналогичный набор функций при разработке в Go. Возможно, у меня есть несколько записей в хранилище данных, в которых все разделяют 10 общих полей, а затем имеют еще 10 полей, которые зависят от той таблицы, из которой они сошли. Так же, как я использовал наследование для уменьшения дублирования в типичных языках OO, таких как C++, C# или Java, я бы использовал вложение в Go. На мой взгляд, это основной прецедент для этого. Это своего рода странное сочетание композиции и наследования. Вы сочиняете объект других (те, которые вы внедряете), но так как методы/поля внедренных типов продвигаются в область вложений, они много работают, как если бы наследователь, унаследованный от встроенного типа. Надеюсь, что дается некоторое разъяснение относительно того, с чем вы здесь сталкиваетесь ... На самом деле вы не задали вопрос, на который можно ответить, но в комментариях нет места для такого длинного объяснения особенностей/концепций, re используя ваш пример кода.
Каждый раз, когда вы используете 'this', умирает котенок. Следуйте рекомендациям [Effective Go] (https://golang.org/doc/effective_go.html) и дайте ему собственное имя. Например: 'func (o obj2) printTest() ...' – eduncan911
Я не понимаю, что вы спрашиваете или как это вообще относится к пакету «go/types» (который вы не используете) , Что вы ожидаете отсюда? – JimB
Я исправил это. Пожалуйста, прекратите причинять вред животным. – Charlie