Đây là mã của tôi:Làm thế nào để thực hiện phương thức giao diện với kiểu trả về là một giao diện trong 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!"
}
tôi nhận được một lỗi:
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
Đây là mã đầy đủ: http://play.golang.org/p/udhsZgW3W2
tôi nên chỉnh sửa giao diện IA hoặc modifi Cấu trúc của mình? Nếu tôi định nghĩa IA, IB trong một gói khác (vì vậy tôi có thể chia sẻ các giao diện này), tôi phải nhập gói của tôi và sử dụng IB như kiểu trả về của A.FB(), có đúng không?
này không trả lời câu hỏi. Vấn đề là chúng tôi muốn có các giao diện trong một tập tin mới mà không thể thay đổi định nghĩa gốc. – epsalon
@epsalon Vấn đề của bạn liên quan đến vấn đề ban đầu như thế nào? Vui lòng mô tả nhiều hơn một chút. – Mue
Tôi nghĩ câu hỏi của @ epsalon khá thích hợp. Giả sử cả A và B được định nghĩa trong một gói riêng biệt và không thể truy cập được. Làm thế nào có thể xác định giao diện IA và IB hồi tưởng? Một ví dụ về khi bạn có thể muốn làm điều này là nếu bạn đang cố gắng xác định các giao diện này để sử dụng các mocks cho cả A và B trong một gói hoàn toàn khác mà không thể sửa đổi các tệp gốc trong đó A và B được khai báo. – ishaaq