Golang

2012-08-12 29 views
20
İşte

bir arayüz benim kodudur IA arabirimini veya A yapısını değiştirmeli mi?
Başka bir pakette IA, IB'yi tanımlarım varsa (yani bu arabirimi paylaşabilirim), paketimi içe aktarmalı ve IB'yi, A.FB() döndürülen tür olarak kullanmalıyım, doğru mu?Golang

cevap

15

Bir başka pakette tanımlanabilir

func (a *A) FB() IB { 
    return a.b 
} 

Şüphesiz IB içine

func (a *A) FB() *B { 
    return a.b 
} 

değiştirin. Her iki arabirimler paketinde foo tanımlanan ve uygulamaları paketinde bar içindedir eğer uygulama

func (a *A) FB() foo.IB { 
    return a.b 
} 
+0

Bu soruya cevap vermez ise, o zaman beyan

type IA interface { FB() IB } 

olduğunu. Sorun, orijinal tanımı değiştiremeden yeni bir dosyada arayüzlere sahip olmak istiyoruz. – epsalon

+0

@epsalon Sorununuz orijinaliyle nasıl bağlantılı? Lütfen biraz daha açıklayınız. – Mue

+2

Sanırım @ epsalon'un sorusu gayet uygun. Hem A hem de B'nin ayrı ve erişilemez bir pakette tanımlandığını varsayarsak. Biri IA ve IB arayüzlerini geriye dönük olarak nasıl tanımlar? Bunu yapmak isteyebileceğiniz bir örnek, A ve B'nin bildirildiği orijinal dosyaları değiştirmeden tamamen farklı bir pakette hem A hem de B için alayları kullanmak için bu arabirimleri tanımlamaya çalışıyor olmanızdır. – ishaaq