Как работает следующий код? Я понимаю, что obj1 включает obj2, и поэтому printTest продвигается так, что мы можем вызвать obj1.printTest() вместо того, чтобы называть его, используя obj1.obj2.printTest().Почему этот способ не продвигается в Go?
Что происходит с obj1Selector (я не уверен, что строка даже называется, которая находится перед obj2)? Включает ли obj1Selector obj2? Кто-то сказал мне, что obj1Selector не вставляет obj2, но реализует поле, называемое селектором, которое имеет тип obj2, но что это значит - почему он не внедряется? Почему я не могу назвать oSelector.printTest()?
type obj1 struct {
obj2
}
type obj1Selector struct {
selector obj2
}
type obj2 struct {
}
func (o obj2) printTest() {
fmt.Println("obj2")
}
func main() {
o := obj1{}
o.printTest()
oSelector := obj1Selector{}
oSelector.selector.printTest()
//oSelector.printTest() //Doesn't work
Я обновил свой ответ в ответ на ваше редактирование. Пожалуйста, проверьте. – desaiparth
«Почему я не могу позвонить oSelector.printTest()?» Потому что функция 'printTest' для значений' obj1Selector' отсутствует. – hobbs