Ecco il mio codice:Come implementare metodo di interfaccia con il tipo restituito è un'interfaccia in Golang
type IA interface {
FB() IB
}
type IB interface {
Bar() string
}
type A struct {
b *B
}
func (a *A) FB() *B {
return a.b
}
type B struct{}
func (b *B) Bar() string {
return "Bar!"
}
ottengo un errore:
cannot use a (type *A) as type IA in function argument:
*A does not implement IA (wrong type for FB method)
have FB() *B
want FB() IB
Ecco il codice completo: http://play.golang.org/p/udhsZgW3W2
I modificare l'interfaccia IA o modificare la mia struttura A?
Cosa succede se definisco IA, IB in un altro pacchetto (quindi posso condividere questa interfaccia), devo importare il mio pacchetto e usare l'IB come tipo restituito di A.FB(), è giusto?
questo non risponde alla domanda. Il problema è che vorremmo avere le interfacce in un nuovo file senza poter modificare la definizione originale. – epsalon
@epsalon In che modo il tuo problema si riferisce a quello originale? Si prega di descrivere un po 'di più. – Mue
Penso che la domanda di @ epsalon sia abbastanza pertinente. Supponendo che A e B siano definiti in un pacchetto separato e inaccessibile. Come si possono definire le interfacce IA e IB in modo retrospettivo? Un esempio di quando si potrebbe voler fare questo è se si sta tentando di definire queste interfacce al fine di utilizzare mock per entrambi A e B in un pacchetto completamente diverso senza essere in grado di modificare i file originali dove vengono dichiarati A e B. – ishaaq