日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Golang的接口

發(fā)布時間:2023/11/27 生活经验 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Golang的接口 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

當(dāng)一只鳥走路像鴨子,游泳像鴨子,叫起來也像鴨子,那么我們就認(rèn)為它就是鴨子。

Duck?typing?的理念因此比喻得名。

Golang?通過?interface?實現(xiàn)?duck?typing。?Effective?Go?文章中這樣描述?interface:?interface

指定了一種描述對象行為的方法:如果某樣?xùn)|西可以做這件事,這樣?xùn)|西就可以用在這里。

再具體講,?就是當(dāng)某個變量的類型實現(xiàn)了某個接口的所有方法?(這個時候可以稱該類型實現(xiàn)

滿足該接口)?,那么這個變量就能用在要求這個接口的地方。

?

package mainimport ("reflect""fmt"
)type Test struct {
}func (this *Test)test() {fmt.Println("in test()")
}type Tester interface {test()
}func MakeTest1(v Tester) {fmt.Printf("\nIn Maketest1\n")v.(Tester).test()
}func MakeTest2(v interface{}) {fmt.Printf("\nIn Maketest2\n")v.(Tester).test()
}func main() {t := new(Test)var ti Testerti = tti.test()// 接口類型斷言// value為Test類型的對象// 是ti的值value := ti.(Tester)fmt.Printf("\n方式1:\n")fmt.Println(reflect.TypeOf(value))value.test()// v是ti的值,是Test類型// Tester是接口類型if v, ok := ti.(Tester); ok {fmt.Printf("\n方式2:\n")fmt.Println(reflect.TypeOf(v))v.test()}// switch type專用組合// 如果需要在if中判斷可以用上面的形式switch t := ti.(type) {case Tester:fmt.Printf("\n方式3:\n")fmt.Println("Tester")fmt.Println(reflect.TypeOf(t))t.test()default:fmt.Println("Unknow")}// 傳遞Test結(jié)構(gòu)變量// 因為Test實現(xiàn)了Tester接口 
    MakeTest1(t)// 傳遞Tester接口變量
    MakeTest1(ti)// 傳遞Test結(jié)構(gòu)變量// 因為Test實現(xiàn)了interface{}接口
    MakeTest2(t)// 傳遞Tester接口變量// 因為任何類型都實現(xiàn)了interface{}
    MakeTest2(ti)}

?

?運行結(jié)果:

in test()方式1:
*main.Test
in test()方式2:
*main.Test
in test()方式3:
Tester
*main.Test
in test()In Maketest1
in test()In Maketest1
in test()In Maketest2
in test()In Maketest2
in test()

Golang?里面有個空的接口?interface{},?大括號里看上去什么也沒有,?但認(rèn)為它有一個空

的方法;Golang?里的每一種類型或者你自定義的類型,不管有沒有添加了什么具體的方法,

都認(rèn)為有一個空的方法。因此每種類型自動實現(xiàn)了?interface{}接口,要求?interface{}的地方

就可以用任意類型的變量。

下載interface.go

轉(zhuǎn)載于:https://www.cnblogs.com/huazi/p/3506176.html

總結(jié)

以上是生活随笔為你收集整理的Golang的接口的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。