在Go語言中,接口(interface)是一種類型,它定義了一組方法,但不實現它們。接口的組合是指一個接口可以嵌入其他接口,從而繼承其方法。這使得我們可以創建更復雜的接口,以滿足不同的需求。
要實現接口組合,我們需要在定義接口時使用import
關鍵字導入其他接口所在的包,然后在接口定義中使用type ... interface {...}
的形式嵌入其他接口。這樣,實現該接口的類型必須實現被嵌入接口的所有方法。
下面是一個簡單的示例,展示了如何使用接口組合:
package main
import (
"fmt"
)
// Reader 接口定義了一個Read方法
type Reader interface {
Read(p []byte) (n int, err error)
}
// Closer 接口定義了一個Close方法
type Closer interface {
Close() error
}
// ReadCloser 接口組合了Reader和Closer接口
type ReadCloser interface {
Reader
Closer
}
// MyReader 是一個實現了Reader接口的類型
type MyReader struct{}
func (r MyReader) Read(p []byte) (n int, err error) {
fmt.Println("Reading...")
return len(p), nil
}
// MyCloser 是一個實現了Closer接口的類型
type MyCloser struct{}
func (c MyCloser) Close() error {
fmt.Println("Closing...")
return nil
}
// MyReadCloser 是一個實現了ReadCloser接口的類型
type MyReadCloser struct {
MyReader
MyCloser
}
func main() {
var rc ReadCloser = MyReadCloser{}
rc.Read([]byte("Hello, World!"))
rc.Close()
}
在這個示例中,我們定義了三個接口:Reader
、Closer
和ReadCloser
。ReadCloser
接口通過嵌入Reader
和Closer
接口,繼承了它們的方法。然后,我們創建了三個結構體:MyReader
、MyCloser
和MyReadCloser
,分別實現了Reader
、Closer
和ReadCloser
接口。最后,在main
函數中,我們創建了一個MyReadCloser
類型的變量rc
,并調用了它的Read
和Close
方法。
通過這種方式,我們可以輕松地實現接口的組合,以滿足不同的需求。