Go接口嵌套的使用

原文鏈接:https://www.zhoubotong.site/post/86.html
這裏介紹下接口interface嵌套的用法,大家知道Go語言中不僅僅結構體與結構體之間可以嵌套,接口與接口之間也可以嵌套,通過接口的嵌套我們可以定義出新的接口。

Golang 的接口嵌套,其實也就是一個接口裏麪包含一個或多個其他的接口,被包含的接口的所有方法都會被包含到新的接口中。

只有實現接口中所有的方法,包括被包含的接口的方法,纔算是實現了接口。

Go語言接口嵌套

語法

type Interface1 interface{
    func1()
}
type Interface2 interface{
    func2()
}
type Interface interface{
    Interface1
    Interface2
    func()
}

說明

上面我們定義了一個接口 Interface1 和一個接口 Interface2,接口 Interface1 裏面由一個方法 func1,接口 Interface12 裏面有一個函數 func2。

接着我們定義了接口 Interface,接口 Interface 裏面包含了接口 Interface1 和接口 Interface2,同時包含了方法 func。

此時接口 Interface 相當於包含了方法 func1、func2 和 func,所以我們必須實現 func1、func2 和 func 這三個方法纔算實現了接口 Interface。

例子

接口嵌套

必須實現嵌套的接口的所有方法,纔算實現接口

package main

import (
    "fmt"
)

type Studenter struct { // 該Studenter結構體用來演示 如何實現接口的所有的方法
}
type Reader interface {
    ReaderFunc()
}
type Writer interface {
    WriterFunc(str string)
}
type ReadAndWriter interface { // 嵌套結構體
    Reader
    Writer
}

func (s Studenter) ReaderFunc() {
    fmt.Println("調用ReaderFunc")
}
func (s Studenter) WriterFunc(str string) {
    fmt.Println("調用 WriterFunc Str =", str)
}
func main() {
    fmt.Println("草堂筆記(www.zhoubotong.site)")
    // 必須實現嵌套的接口的所有方法,纔算實現接口
    var s interface{}              // 定義接口類型變量s
    var student Studenter          // 定義 Studenter 結構體類型的變量 student
    s = student                    // 將 Studenter 賦值給了變量 s
    student.ReaderFunc()           // 調用ReaderFunc方法
    student.WriterFunc("這裏是一段寫函數") // 調用WriterFunc方法
    // 下面使用 接口類型斷言,分別判斷變量 s 是否是接口 Reader 、Writer 和 ReadAndWriter 類型
    if reader, Ok := s.(Reader); Ok { // s 轉換成Reader 接口
        fmt.Println("Studenter is type of Reader, Reader =", reader)
    }
    if writer, Ok := s.(Writer); Ok { // s 轉換成Writer 接口
        fmt.Println("Studenter is type of Reader, Writer =", writer)
    }
    if readAndWriter, Ok := s.(ReadAndWriter); Ok {
        fmt.Println("Studenter is type of Reader, ReadWriter =", readAndWriter)
    }
}

輸出:

草堂筆記(www.zhoubotong.site)
調用ReaderFunc
調用 WriterFunc Str = 這裏是一段寫函數
Studenter is type of Reader, Reader = {}
Studenter is type of Reader, Writer = {}
Studenter is type of Reader, ReadWriter = {}

上面student同時實現了接口中的Reader和Writer方法,我們發現變量 s 同時是 Reader 、Writer 和 ReadAndWriter 類型,即結構體 Studenter 同時實現了以上三個接口,

其實這個例子就是用一個struct實現一個嵌套接口的方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章