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

什麼是Golang中的interface

藏色散人
發布: 2021-06-18 15:37:14
轉載
2018 人瀏覽過

下面由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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板