傳統語言的繼承多型由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...