首頁 >後端開發 >Golang >什麼是Golang中的interface

什麼是Golang中的interface

藏色散人
藏色散人轉載
2021-06-18 15:37:141998瀏覽

下面由golang教學專欄跟大家介紹是Golang中的interface,希望對需要的朋友有幫助!

Golang中的interface

先說說接口,接口我理解為一些行為的集合。似乎還是很懵x。來看看程式碼和允許效果,再說。

package main
import "fmt"
type TypeCalculator interface {
    TypeCal() string
}
type Worker struct {
    Type int
    Name string
}
type Student struct {
    Name string
}
func (w Worker) TypeCal() string {
    if w.Type == 0 {
        return w.Name +"是蓝翔毕业的员工"
    } else {
        return w.Name+"不是蓝翔毕业的员工"
    }
}
func (s Student) TypeCal() string  {
    return s.Name + "还在蓝翔学挖掘机炒菜"
}
func main() {
    worker := Worker{Type:0, Name:"小华"}
    student := Student{Name:"小明"}
    workers := []TypeCalculator{worker, student}
    for _, v := range workers {
        fmt.Println(v.TypeCal())
    }
}
//运行效果
//小华是蓝翔毕业的员工
//小明还在蓝翔学挖掘机炒菜
开始解(xia)释(bai)
首先我们写了一个interface,里面有个待实现的方法TypeCal()
type TypeCalculator interface {
    TypeCal() string
}
又写了两个结构体Worker和Student
type Worker struct {
    Type int
    Name string
}
type Student struct {
    Name string
}

分別為他們實現了一個與結構體中同名的函數

func (w Worker) TypeCal() string {
    if w.Type == 0 {
        return w.Name +"是蓝翔毕业的员工"
    } else {
        return w.Name+"不是蓝翔毕业的员工"
    }
}
func (s Student) TypeCal() string  {
    return s.Name + "还在蓝翔学挖掘机炒菜"
}

分別創建worker和student的實例

worker := Worker{Type:0, Name:"小华"}
student := Student{Name:"小明"}

來來來,重點來了,把這兩個實例放同一個TypeCalculator的切片中

workers := []TypeCalculator{worker, student}

遍歷這個切片,並呼叫切片中的函數列印結果

for _, v := range workers {
    fmt.Println(v.TypeCal())
}

簡單分析

從結果來看,確實是不同的實例呼叫的是各自的函數,這個函數和interface中的函數名稱和傳回值是相同的。那麼加入要是某個實例沒有實作interface中的函式呢?當把Student對應的函數註解掉,然後再執行程序,程式報錯如下(用我的散裝英文翻譯就是,Student 沒有實作TypeCalculator,TypeCal這個函數/方法找不到)

 Student does not implement TypeCalculator (missing TypeCal method)

以上是什麼是Golang中的interface的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:studygolang.com。如有侵權,請聯絡admin@php.cn刪除