1.簡介
- 在go中的接口是以一種類型,一種抽象的類型。接口(interface)是一組函數method的集合,go中的接口不能包含任何變量。
- 在go中接口中的所有方法都沒有方法體,接口定義了一個對象的行為規范,只定義規范不實現。接口體現了程序的多態和高內聚低耦合的思想。
- go中的接口也是一種數據類型,不需要顯示實現,只需要一個變量含有接口類型中的所有方法,那么這個變量就實現了這個接口。
2.接口的定義
interface類型可以定義一組方法,但是這些不需要實現。并且interface不能包含任何變量。到某個自定義類型要使用的時候,再根據具體情況把這些方法寫出來(實現)。
type 接口名 interface {
method1(參數...)返回值列表
method2(參數...)返回值列表
}
實現:
func (t 自定義類型) method1(參數...)返回值列表{
//方法體
}
func (t 自定義類型) method2(參數...)返回值列表{
//方法體
}
其中:
- 接口名:使用type將接口定義為自定義類型名,go語言的接口在命名時,一般會在單詞后面添加er,如有寫操作的接口writer,有字符串功能的接口叫Stringer等。接口名最好能突出該接口的類型含義。
- method:當方法名首字母是大寫且這個接口名首字母也是大寫,這個方法可以被接口所在的包(package)之外的代碼訪問。
- 參數和返回值列表:參數和返回值列表中的參數名可以省略。
3.快速入門
定義一個Usber接口讓Phone和Camera結構體實現這個接口。
package mainimport "fmt"// 定義一個接口
type Usber interface {//聲明了兩個沒有實現的方法start()stop()
}type Phone struct {
}// 手機要實現usb接口的化必須得實現usb接口中的所有方法
func (p Phone) start() {fmt.Println("手機開始工作了")
}
func (p Phone) stop() {fmt.Println("手機停止工作了")
}type Camera struct {
}// 照相機要實現usb接口的化必須得實現usb接口中的所有方法func (p Camera) start() {fmt.Println("照相機開始工作了")
}
func (p Camera) stop() {fmt.Println("照相機停止工作了")
}type Computer struct {
}// 編寫一個方法Working,接口一個Usber接口類型的變量
// 只要實現了Usber接口,
func (c Computer) Working(usb Usber) {//通過usb接口變量來調用start和stop方法usb.start()usb.stop(