什麼是多型
對於「多型 Polymorphism」的概念理解像是「要做一件事,但這件事對不同對象來說實踐的方式不同」。多型具體來說像是各種「形狀」都可以「算面積」,但實踐的方法卻不同,而在 Go 當中 interface 就是方法的集合。
Go 與多型
// 1. 圓形和矩形type rect struct { width, height float64}type circle struct { radius float64}
// 2. 定義「形狀」的合約定義上要有的方法(算面積)type geometry interface { area() float64}
// 3. 測量方法必須接收「形狀」func measure(g geometry) { fmt.Println(g.area())}
// 4. 實踐矩形圓形計算面積方法func (r rect) area() float64 { return r.width * r.height}
func (c circle) area() float64 { return math.Pi * c.radius * c.radius}
func main() { r := rect{width: 3, height: 4} c := circle{radius: 5} measure(r) measure(c)}