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
- 流行 VPN 包含允許執行任意程式碼的安全漏洞
- 深入理解Golang之interface和reflectGolang
- cors允許的方法和contype-typeCORS
- GitHub漏洞允許任意程式碼執行,Windows不受影響GithubWindows
- golang使用sqlx報錯:unsupported type []interface {}, a slice of interfaceGolangSQL
- 允許重複的組合
- ts中的type 和 interface 區別
- 使用Golang的interface介面設計原則Golang
- Golang語言中的interface是什麼(下)Golang
- Golang語言中的interface是什麼(上)Golang
- golang 中,對稱加密的程式碼實現Golang加密
- linux系統下如何禁ping和允許pingLinux
- 允許跨域請求跨域
- SpringBoot 允許跨域配置Spring Boot跨域
- JAVA 中interface 和 abstract 區別Java
- 【區分】Typescript 中 interface 和 typeTypeScript
- PHP中的 抽象類(abstract class)和 介面(interface)PHP抽象
- Golang 學習——interface 介面學習(一)Golang
- Golang 學習——interface 介面學習(二)Golang
- java中的interface(介面)Java
- 程式碼雨效果
- 從別人的程式碼中學習golang系列--01Golang
- 從別人的程式碼中學習golang系列--03Golang
- 從別人的程式碼中學習golang系列--02Golang
- 配置 MySQL 允許遠端連線的方法MySql
- HTTP 405 的錯誤提示:訊息 JSP 只允許 GET、POST 或 HEAD。Jasper 還允許 OPTIONS 的解決方法HTTPJS
- 4. 黑科技 Interface |《 刻意學習 Golang 》Golang
- Golang | Go語言多型的實現與interface使用Golang多型
- Laravel API 允許跨域訪問LaravelAPI跨域
- mysql如何允許遠端訪問MySql
- 基於golang的rbac許可權api管理服務(含自動生成CURD程式碼)GolangAPI
- golang程式碼生成工具Golang
- Windows Subsystem for Linux 允許在Windows 11中執行Linux系統WindowsLinux
- golang中的socket程式設計Golang程式設計
- Golang高效實踐之interface、reflection、json實踐GolangJSON
- golang,interface轉換型別 cannot convert t (typGolang型別