最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用go的interface案例實現(xiàn)多態(tài)范式操作

 更新時間:2020年12月23日 14:34:30   作者:濤歌依舊  
這篇文章主要介紹了使用go的interface案例實現(xiàn)多態(tài)范式操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

看程序:

package main 
import "fmt" 
type BaseIntf interface {
 Process()
}
 
type Msg1 struct {
 req int
 rsp int
}
 
func (p *Msg1) Process() {
 fmt.Println("process 1")
}
 
type Msg2 struct {
 req int
 rsp int
}
 
func (p *Msg2) Process() {
 fmt.Println("process 2")
}
 
func main() {
 m1 := new(Msg1)
 m1.Process()
 
 m2 := new(Msg2)
 m2.Process()
}

變一下:

package main 
import "fmt" 
type BaseIntf interface {
 Process()
}
 
func Run(proc BaseIntf) {
 fmt.Println("run")
 proc.Process()
}
 
type Msg1 struct {
 req int
 rsp int
}
 
func (p *Msg1) Process() {
 fmt.Println("process 1")
} 
 
type Msg2 struct {
 req int
 rsp int
}
 
func (p *Msg2) Process() {
 fmt.Println("process 2")
} 
 
func main() {
 m1 := new(Msg1)
 Run(m1)
 
 m2 := new(Msg2)
 Run(m2)
}

這種風(fēng)格的代碼,見了很多次了。

不多說。

補充:go語言中通過空接口查詢來實現(xiàn)多態(tài)

直接看代碼吧~ 空接口算是go語言的精妙之處

package main
type Person struct {
 name string
 age int
}
type Cat struct {
 kind string
 sex bool
 price int
}
func main() {
 family := make([]interface{},0,10)
 obj1 := &Person{
 name: "呂云飛",
 age: 28,
 }
 obj2 := &Person{
 name: "胡景茹",
 age: 18,
 }
 obj3 := &Cat{
 kind: "英短",
 sex: true,
 price: 2000,
 }
 family = append(family, obj1, obj2, obj3)
 for _, value := range family {
 switch obj := value.(type) {
 case *Person:
 print(obj.name + "\n")
 case *Cat:
 print(obj.kind + "\n")
 }
 }
}

輸出結(jié)果如下

呂云飛

胡景茹

英短

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • Go語言并發(fā)之WaitGroup的用法詳解

    Go語言并發(fā)之WaitGroup的用法詳解

    這篇文章主要詳細介紹了Go語言并發(fā)中得到WaitGroup,文中有相關(guān)的代碼示例供大家參考,對我們的學(xué)習(xí)或工作有一定的參考價值,感興趣的同學(xué)跟著小編一起來學(xué)習(xí)吧
    2023-06-06
  • Golang中的path/filepath包用法

    Golang中的path/filepath包用法

    這篇文章主要介紹了Golang中的path/filepath包用法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go?常見設(shè)計模式之單例模式詳解

    Go?常見設(shè)計模式之單例模式詳解

    單例模式是設(shè)計模式中最簡單的一種模式,單例模式能夠確保無論對象被實例化多少次,全局都只有一個實例存在,在Go?語言有多種方式可以實現(xiàn)單例模式,所以我們今天就來一起學(xué)習(xí)下吧
    2023-07-07
  • go語言中slice,map,channl底層原理

    go語言中slice,map,channl底層原理

    這篇文章主要介紹了go語言中slice,map,channl底層原理,slice,map,channl是我們Go語言中最最常用的幾個數(shù)據(jù)結(jié)構(gòu),對于其更多相關(guān)內(nèi)容需要的小伙伴可以參考下面文章詳細內(nèi)容
    2022-06-06
  • Go語言io?pipe源碼分析詳情

    Go語言io?pipe源碼分析詳情

    這篇文章主要介紹了Go語言io?pipe源碼分析詳情,pipe是一個適配器,用于連接Reader和Writer,pipe的方法不多,新的寫法卻不少,并且結(jié)構(gòu)體分兩塊,讀寫信道和結(jié)束標識,下面進入文章了解具體的內(nèi)容吧
    2022-02-02
  • Golang導(dǎo)入包的幾種方式(點,別名與下劃線)

    Golang導(dǎo)入包的幾種方式(點,別名與下劃線)

    這篇文章主要介紹了Golang導(dǎo)入包的幾種方式(點,別名與下劃線),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • golang實現(xiàn)ftp實時傳輸文件的案例

    golang實現(xiàn)ftp實時傳輸文件的案例

    這篇文章主要介紹了golang實現(xiàn)ftp實時傳輸文件的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Golang中的關(guān)鍵字(defer、:=、go?func())詳細解讀

    Golang中的關(guān)鍵字(defer、:=、go?func())詳細解讀

    這篇文章主要介紹了Golang中的關(guān)鍵字(defer、:=、go?func())詳細解讀,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • GO語言創(chuàng)建錢包并遍歷錢包(wallet)的實現(xiàn)代碼

    GO語言創(chuàng)建錢包并遍歷錢包(wallet)的實現(xiàn)代碼

    比特幣錢包實際上是一個密鑰對,當(dāng)你安裝 一個錢包應(yīng)用,或者是使用一個比特幣客戶端來生成一個新地址是,他就會為你生成一個密鑰對,今天通過本文給大家分享go語言遍歷錢包的相關(guān)知識,一起看看吧
    2021-05-05
  • Golang中time.After的使用理解與釋放問題

    Golang中time.After的使用理解與釋放問題

    這篇文章主要給大家介紹了關(guān)于Golang中time.After的使用理解與釋放問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08

最新評論

霸州市| 红原县| 卢氏县| 宁德市| 富裕县| 余姚市| 涞水县| 固安县| 友谊县| 渝北区| 木兰县| 平江县| 克山县| 湛江市| 贺州市| 潍坊市| 镶黄旗| 吉木萨尔县| 德昌县| 盘山县| 永州市| 平远县| 安平县| 孟连| 来安县| 麻江县| 孟州市| 比如县| 普陀区| 彭阳县| 鱼台县| 乐至县| 金华市| 孟连| 新竹县| 阳东县| 茂名市| 三原县| 安新县| 山东省| 乌拉特中旗|