使用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)文章
Golang構(gòu)建WebSocket服務(wù)器和客戶端的示例詳解
這篇文章主要為大家詳細(xì)介紹了如何使用Go語言構(gòu)建WebSocket服務(wù)器和客戶端,以實現(xiàn)雙向通信,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考一下2023-11-11

