Golang中的interface程式碼和允許效果
先說說介面,介面我理解為一些行為的集合。先來看看程式碼和允許效果。
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())
}
}
//執行效果
//小華是藍翔畢業的員工
//小明還在藍翔學挖掘機炒菜
開始解釋
1. 首先我們寫了一個interface,裡面有個待實現的方法TypeCal()
type TypeCalculator interface {
TypeCal() string
}
2. 又寫了兩個結構體Worker和Student
type Worker struct {
Type int
Name string
}
type Student struct {
Name string
}
3. 分別為他們實現了一個與結構體中同名的函式
func (w Worker) TypeCal() string {
if w.Type == 0 {
return w.Name + "是藍翔畢業的員工"
} else {
return w.Name + "不是藍翔畢業的員工"
}
}
func (s Student) TypeCal() string {
return s.Name + "還在藍翔學挖掘機炒菜"
}
4. 分別建立worker和student的例項
worker := Worker{Type:0, Name:"小華"}
student := Student{Name:"小明"}
5. 重點來了,把這兩個例項放同一個TypeCalculator的切片中
workers := []TypeCalculator{worker, student}
6. 遍歷這個切片,並呼叫切片中的函式列印結果
for _, v := range workers {
fmt.Println(v.TypeCal())
}
簡單分析
從結果上看,確實是不同的例項呼叫的是各自的函式,這個函式和interface中的函式名和返回值是相同的。那麼加入要是某個例項沒有實現interface中的函式呢?當把Student對應的函式註釋掉,然後再執行程式,程式報錯如下(用我的散裝英語翻譯就是,Student 沒有實現TypeCalculator,TypeCal這個函式/方法找不到)
Student does not implement TypeCalculator (missing TypeCal method)
感謝作者:小小程式設計師Eric
檢視原文:Golang中的interface,一看就明白
新增小編微信:grey0805,加入知識學習小分隊~!
相關文章
- Firefox,Chrome中的高危漏洞允許執行任意程式碼FirefoxChrome
- Golang之interfaceGolang
- 深入理解Golang之interface和reflectGolang
- 流行 VPN 包含允許執行任意程式碼的安全漏洞
- golang interface淺談Golang
- cors允許的方法和contype-typeCORS
- GitHub漏洞允許任意程式碼執行,Windows不受影響GithubWindows
- golang使用sqlx報錯:unsupported type []interface {}, a slice of interfaceGolangSQL
- 只允許一個程式執行winformORM
- Golang interface介面深入理解Golang
- ts中的type 和 interface 區別
- PHP interface(介面)的示例程式碼PHP
- linux 關閉只允許SSH登陸(允許使用者名稱、密碼登陸)Linux密碼
- UITextField只允許輸入中,英文,數字UI
- 用程式碼的方式開啟“允許安裝來自未知來源的應用”
- 使用Golang的interface介面設計原則Golang
- Golang語言中的interface是什麼(上)Golang
- Golang語言中的interface是什麼(下)Golang
- golang 中,對稱加密的程式碼實現Golang加密
- JAVA 中interface 和 abstract 區別Java
- 【區分】Typescript 中 interface 和 typeTypeScript
- winform只允許一個應用程式執行ORM
- mac允許任何來源Mac
- 允許跨域請求跨域
- PHP中的 抽象類(abstract class)和 介面(interface)PHP抽象
- PHP 中的抽象類(abstract class)和介面(interface)PHP抽象
- 在 RedHat 中限制、允許telnet&ftp功能(轉)RedhatFTP
- Golang 學習——interface 介面學習(一)Golang
- Golang 學習——interface 介面學習(二)Golang
- iOS UITableViewCell允許滑動的處理iOSUIView
- java中的interface(介面)Java
- 逐行顯示檔案內容並允許修改的DCL指令碼指令碼
- 從別人的程式碼中學習golang系列--03Golang
- 從別人的程式碼中學習golang系列--01Golang
- 從別人的程式碼中學習golang系列--02Golang
- html只允許輸入的資料校驗,只允許輸入字母漢字數字等HTML
- 4. 黑科技 Interface |《 刻意學習 Golang 》Golang
- 僅允許程式一個例項執行VC6