實現 String()方法
如果一個變量實現了String()
這個方法,那麼fmt.Printf
默認會調用這個變量的String()
進行輸出
1 | package main |
result
1 | Chemistry Class 101 - Dr.Chang |
- 以上為一接口的實現
定義
- Interface為一種類型可以定義多個方法,但是本身不需要實現,由調用接口者實現
- Interface不能包含任何字段、變量
- Interface類型默認就是一個指針
1 | type 接口名 interface{ |
- 只要某個類型實現了
Print()
及Sleep()
這兩個方法,這個類型也同時實現了Test
這個接口 - 要是接口裡定義多個方法,某個類型也要同時實現這些多個方法,才算是實現接口
- 不能部份實現方法(只實現一種方法),必須全部實現
空接口
- 要是接口裡沒有任任何方法,我們稱為空接口
- 任何類型皆實現空接口 (空接口能指向任何類型)
1 | package main |
result
1 | int |
接口調用
- Goalng中的接口,不需要顯式的實現(只要自定義的類型裡,方法名、參數、返回類型有對上即可)
- 只要某種類型實現接口裡的所有方法,就可以將實例化的接口變量指向某種類型,並使用實例化的接口調用方法
example
1 | package main |
result
1 | Bike running |
實現多接口
- 如果一個變量含有了多個interface類型的方法,那麼這個變量就實現了多個接口
example
1 | package main |
Nokia
變量實現了多個接口
result
1 | SendMessage |
tips
- struct中必須全部實踐interface的所有方法 才算是成功調用接口 (不能部分實踐)
- 實例化的接口 可以指向多種不同的實例化類型 (多態)
排序
每種不同的類型,皆有排序的需求,因此將排序的功能做成一個接口
只要實現排序接口的各個方法就能實現排序的功能
Golang中的sort package也有這樣的接口
https://golang.org/pkg/sort/
1 | type Interface interface { |
example
1 | package main |
- 可依照自己的需求 調整自訂義類型的排序方法
result
1 | Before Sort: [{Tom 8081 18 60} {Amy 7887 17 70} {Tony 1847 16 80}] |
tips
- 只要實現
sort
包中Interface
這個接口的規範,任何自訂義類型接能調用此接口使用sort.Sort()
方法排序