關於golang面向介面

2021-08-26 02:59:03 字數 2632 閱讀 5948

傳統語言的繼承多型由go語言的介面完成 所以go語言的介面比較靈活

go語言介面由使用者定義 傳統語言由實現者定義

先來乙個簡單的介面示例 

package mock //介面方法專用包

type retriever struct

func (r retriever)get(url string) string

package main

import (

"fmt"

"awesomeproject1/test/retriever/reals"

)type retriever inte***ce

func download(r retriever)string

func main() // 變數初始化

fmt.println(download(r)) //列印返回值

}//返回值為this is a fack baidu.com

上面的例子看出go語言的靈活性 先由使用者明確要使用的方法名稱 而後由結構體建立方法

result, err:= httputil.dumpresponse(resp,true) //爬取內容

resp.body.close() // 關閉網頁

if err != nil

return string(result) //返回爬取內容

}

package main

import (

"fmt"

"awesomeproject1/test/retriever/reals"

)type retriever inte***ce

func download(r retriever)string

func main() // 變數初始化

fmt.printf("%t %v\n", r,r)

//列印返回值

}

上述例子中 r被reals.retriever{}賦值 r究竟是什麼東西讓我們列印一下

返回結果為

reals.retriever
由此可見 r其中有型別及引數

同時介面中的方法可以指標傳遞 在方法中

func (r *retriever)get(url string) string
func main() // 變數初始化

fmt.printf("%t %v\n", r,r)

}

列印結果為

*reals.retriever &
型別及引數皆為指標 注意一旦採用指標傳遞 對應的方法也必須加上指標符 否則無法傳遞理想資料

realretriever := r.(*reals.retriever)

fmt.println(realretriever.timeout)

同樣 介面可以通過.()賦值給變數內部引數需要注意的是結構體成員變數開頭字母需大寫 否則無法看到

inte***ce不光是介面的關鍵字inte***ce{}還代表任何型別

package queue

type queue inte***ce{}

func (q *queue)push(data inte***ce{})

func (q *queue)pop() inte***ce{}

func (q *queue)isempty()bool

package main

import (

"awesomeproject1/test/queueentry/queue"

"fmt"

)func main()

r.push("a")

r.push("b")

r.push(3)

fmt.println(r.pop())

fmt.println(r.pop())

fmt.println(r.pop())

}//列印結果為a b 3

如果想要從任何型別inte***ce{}中取得指定型別 要在型別變數後加.(想要轉換的型別)

r.(int)
go語言的介面可以「繼承」 go語言中稱為組合

type retriever inte***ce

type poster inte***ce

type retrievenposter inte***ce

go語言中的組合加定義介面方法賦予了go語言介面的靈活性

Golang學習筆記 物件導向介面封裝

package utils import fmt 定義結構體 type familyaccount struct 編寫要給工廠模式的構造方法 func newfamilyaccount familyaccount 主體業務邏輯 func this familyaccount initmainpage...

golang中介面的物件導向(二) 繼承

在上一節 golang中介面的物件導向 一 多型特徵中,我們學習了galang中的多型,那麼這一節中,我們來學習繼承。一般我們可以使用匿名字段嵌入結構體中來實現繼承 type geometry inte ce type rect struct 或者匿名指標 介面型別是一種抽象型別,不能被例項化,所以...

golang 物件導向

method的語法如下 func r receivertype funcname parameters results 下面我們用最開始的例子用method來實現 package main import fmt math type rectangle struct type circle struc...