golang struct 實(shí)現(xiàn) interface的方法
golang中,一般strcut包含 interface類型后,struct類型都需要實(shí)現(xiàn) interface導(dǎo)出的接口,從而成為相應(yīng)的 interface接口類。
實(shí)際上,struct包含interface之后,并不需要實(shí)現(xiàn)interface的接口,也能成為 interface接口類。
代碼如下:
type newEr interface { New() } type testInterface interface { newEr Done() <-chan struct{} } type kkTest struct { testInterface } func NewTest() newEr { return kkTest{} } func main() { kk := NewTest() i,ok := kk.(testInterface) fmt.Println(i,ok) ch := i.Done() fmt.Println(ch) }
其中 i,ok := kk.(testInterface) 測(cè)試成功,也就是說 kkTest 已經(jīng)是 testInterface 接口類,但是后續(xù) ch := i.Done() 引發(fā) panic,這個(gè)也是預(yù)料之內(nèi)的。
相關(guān)的應(yīng)用可以看 context包中的實(shí)現(xiàn),valueCtx部分實(shí)現(xiàn)了 Context 接口函數(shù),對(duì)其不需要的函數(shù)沒有實(shí)現(xiàn),如果調(diào)用了這些未實(shí)現(xiàn)的函數(shù)就會(huì)導(dǎo)致 panic。這樣在程序排錯(cuò)其實(shí)是很有好處的,因?yàn)檎{(diào)用到這些接口,說明代碼其實(shí)已經(jīng)寫錯(cuò)了。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Golang 實(shí)現(xiàn) Redis系列(六)如何實(shí)現(xiàn) pipeline 模式的 redis 客戶端
pipeline 模式的 redis 客戶端需要有兩個(gè)后臺(tái)協(xié)程負(fù)責(zé) tcp 通信,調(diào)用方通過 channel 向后臺(tái)協(xié)程發(fā)送指令,并阻塞等待直到收到響應(yīng),本文是使用 golang 實(shí)現(xiàn) redis 系列的第六篇, 將介紹如何實(shí)現(xiàn)一個(gè) Pipeline 模式的 Redis 客戶端。2021-07-07Golang測(cè)試框架goconvey進(jìn)行單元測(cè)試流程介紹
goconvey是一款針對(duì)Golang的測(cè)試框架,可以管理和運(yùn)行測(cè)試用例,同時(shí)提供了豐富的斷言函數(shù),并支持很多Web界面特性,這篇文章主要介紹了使用goconvey進(jìn)行單元測(cè)試流程,感興趣的同學(xué)可以參考下文2023-05-05Go語言實(shí)現(xiàn)Snowflake雪花算法
雪花算法產(chǎn)生的背景當(dāng)然是twitter高并發(fā)環(huán)境下對(duì)唯一ID生成的需求,得益于twitter內(nèi)部牛的技術(shù),雪花算法能夠流傳于至今并且被廣泛使用,本文就詳細(xì)的介紹一下,感興趣的可以了解一下2021-06-06一文帶你了解Go中跟蹤函數(shù)調(diào)用鏈的實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了go如何實(shí)現(xiàn)一個(gè)自動(dòng)注入跟蹤代碼,并輸出有層次感的函數(shù)調(diào)用鏈跟蹤命令行工具,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11Golang標(biāo)準(zhǔn)庫syscall詳解(什么是系統(tǒng)調(diào)用)
最近在研究go語言,發(fā)現(xiàn)go語言系統(tǒng)調(diào)用源碼只有調(diào)用函數(shù)的定義,今天通過本文給大家分享Golang標(biāo)準(zhǔn)庫syscall詳解及什么是系統(tǒng)調(diào)用,感興趣的朋友一起看看吧2021-05-05