go語言中interface的實踐
阿新 • • 發佈:2018-11-07
package main import ( "fmt" "math" ) type geometry interface { area() float64 perim() float64 } type square struct { width, height float64 } type circle struct { radius float64 } //要在go中實現一個介面,我們只需要實現介面中的所有方法 //`square`的實現,s接收者接受了area()方法 func (s square) area() float64 { return s.width * s.height } //`square`的實現,s接收者接受了perim()方法 func (s square) perim() float64 { return 2*s.width + 2*s.height } //`circle`的實現,c接收者接受了area()方法 func (c circle) area() float64 { return math.Pi * c.radius * c.radius } //`circle`的實現,c接收者接受了perim()方法 func (c circle) perim() float64 { return 2 * math.Pi * c.radius } //如果一個變數或者引數是介面型別,那麼我們可以呼叫這個被命名的介面中的方法 func measure(g geometry) { fmt.Println(g) fmt.Println(g.area()) fmt.Println(g.perim()) } func main() { //定義並初始化square、circle struct,可以理解為結構體的例項?結構體的接收者? s := square{width: 3, height: 4} c := circle{radius: 5} measure(s) measure(c) } //output: {3 4} 12 14 {5} 78.53981633974483 31.41592653589793