вернуть интерфейс по типу встраивания - PullRequest
0 голосов
/ 17 октября 2019

Мне нужно вернуть интерфейс. Но я получаю ошибку:

cannot use B literal (type B) as type K in return argument:
    B does not implement K (missing Check method)

Я думал, что когда я встраиваю тип, я получил все методы внутреннего типа, а также тип интерфейса

package main

import (
    "fmt"
)

type K interface {
    Check()
}

type A struct {
    A string
}

type B struct {
    B A
}

func (a A) Check() {
    fmt.Println(a.A)
}

func newB(a A) K {
    return B{B: a}
}

func main() {
    a := A{A: "A struct"}
    b := newB(a)

    b.Check()

}

, как решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 17 октября 2019

Это не встраивание:

type B struct {
    B A
}

С учетом вышесказанного у вас есть:

var b B
b.B.Check()

Это вложение:

type B struct {
  A
}

С учетом выше,у вас есть:

var b B
b.Check()

У вас также есть:

b.A.Check()
0 голосов
/ 17 октября 2019

B не имеет метода Check, и нигде в вашем примере кода вы не выполняете встраивание. Просто сделайте так, чтобы B реализовал Check. Сообщение об ошибке довольно ясно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...