? 接口:
? ? ? ? ? ? ? ? 空接口類型:
? ? ? ? ? ? ? ? ? ? ? ? 要實現一個接口,就要實現該接口中的所有方法。因為空接口中沒有方法,所以自然所有類型都實現了空接口。那么就可以使用空接口類型變量去接受所有類型對象。
????????????????????????類比java,有點像Object類型的概念,所有類型都是Object類型的間接子類,可以用Object類型變量去接收任意對象。
? ? ? ? type A? interface{}
? ? ? ? ?var? obj1? ? ?A? ?=? Cat{ "string字符串"}
? ? ? ? ?var? obj2? ? =? ?123
? ? ? ? ? ? ?
? ? ???????????fmt.Println()?fmt.Println()方法的參數是 空接口類型的切片,意思就是可以接收任意類型對象,并且數量是一個或多個任意類型對象。
? ? ? ? ? ? 接口的實現和調用:
? ? ? ? ? ? ? ? ? ? ? ? 實現接口
????????????????????????????????要實現一個接口,就要實現該接口中的所有方法。
?? ? ? ? ? ? ????????? ? ?自定義的Cat類型實現了test1() test2() test3()方法,所以Cat類型實現了接口A,接口B,接口C。
? ? ? ? ? ? ? ? ? ? ? ? 調用接口
? ? ? ? ? ? ? ? ????????默認創建一個對象:? var cat? Cat? =Cat { }。?test1(),test2(),test3()方法都是Cat類型本身的,自然可以調用。
? ? ? ? ? ? ? ? ? ? ? ? 如果用? A類型去接受cat對象,也就是 Var? catA? A? = cat,那么這個對象是A接口類型的實現類?,只能調用A接口類型的方法。
? ? ? ? ? ? ? ? ? ? ? ? 類比java,就是java的多態。聲明一種類型叫生物,這種生物行為是能叫喊,現實對象有一只貓也能叫,生物的實例對象可以是這只貓,但是呢這個生物只能喵喵叫,計算機只知道這個對象類型是生物,計算機不知道它實際是個貓,只把它當作生物類型處理的話,自然只能執行生物所包含的方法。
?????????????????????????? ? ? ?
? ? ? ? 類型斷言
? ? ?創建斷言
? ? ? ? ? ? ?1)? ?? obj , judgeValue? ?:=? 對象. ( 類型)??
? ? ? ? ? ? ?2)? ? ? ?switch? obj :=? 對象.(類型){
? ? ? ? ? ? ? ? ? ? ? ? ????????case? 實際類型1:? ? ?fmt.Print(obj)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? case? 實際類型2:? ? ?fmt.Print(obj)
? ? ? ? type關鍵字
? ? ? ? ? ? ? ? ? ? ? 創建結構體類型
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? type? Class? ?struct{ }
? ? ? ? ? ? ? ? ? ? ? 創建新類型??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? type? Class2? ?Class
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 新類型Class2 的屬性方法和Class一致,但是仍然是兩種不同的類型.
? ? ? ? ? ? ? ? ? ? ? 創建類型別名
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? type? Class2? =? Class
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 給Class類型起一個別名,兩個名稱都表示同一種類型,只是名字不一樣.
? ? ? ? ? ? ? ? ? ? ? 創建函數類型
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? type? myfunc? func(string)(string);