Сделать объект доступным в унаследованном методе в golang

Я пытаюсь реализовать наследование в golang. Ниже приведен пример:

type A struct {
  Number int
}

type B struct{
  A
  name String
}

func (a A) GetNumber() {
    // Here I want to use instance of B
    fmt.Println(a) // but this is giving me instance of A
}

Можно ли получить экземпляр B в функции A, если A наследуется B?


person Paritosh Singh    schedule 13.05.2016    source источник
comment
В Go нет наследования. Некоторые связанные/возможные дубликаты: one, два, три, four.   -  person icza    schedule 13.05.2016


Ответы (1)


Во-первых, у вас ошибка в коде. Пока вы не создали другой тип, определенный как String, вы должны исправить его на string.

Затем в Go вы можете использовать составные структуры, что означает, что вы можете напрямую обращаться к полю структуры, включенному в другую структуру, как вы уже делали.

Это означает, что вы можете вызвать метод для получателя метода, в котором объявлены поля структуры. Чтобы исправить ваш пример, если я правильно понимаю ваш вопрос:

package main

import (
    "fmt"
)

type A struct {
    Number int
}

type B struct{
    A
    name string
}

func main() {
    b := &B{A{1}, "George"}
    b.GetValues()
}

func (b B) GetValues() {    
    fmt.Println(b.Number)
    fmt.Println(b.name)
}

В приведенном ниже примере, поскольку struct A включено в struct B, это означает, что вы можете вызвать поле структуры, объявленное в struct A, в методе GetValues. Это связано с тем, что struct B наследует поля struct A.

https://play.golang.org/p/B-XJc6jddE

person Endre Simo    schedule 13.05.2016