下面由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中文網其他相關文章!