interface - skynocover/Wiki-for-GoLang GitHub Wiki
interface
var a interface{} //範用型別
//file接口
type File interface {
Read(b Buffer) bool
Write(b Buffer) bool
Close()
}
type geometry interface { //繼承area以及perimeter
area() float64
perimeter() float64
}
type square struct { //方形
width, height float64
}
type circle struct { //圓形
radius float64
}
func (s square) area() float64 { //定義面積 輸入是square的struct
return s.width * s.height
}
func (s square) perimeter() float64 { //定義周長
return 2*s.width + 2*s.height
}
func (c circle) area() float64 { //定義circle面積
return math.Pi * c.radius * c.radius
}
func (c circle) perimeter() float64 { //定義周長
return 2 * math.Pi * c.radius
}
func measure(g geometry) { //定義輸入 可以是area或perimeter
fmt.Println(g)
fmt.Println(g.area())
fmt.Println(g.perimeter())
}
func main() {
s := square{width: 3, height: 4} //宣告struct
c := circle{radius: 5}
measure(s) //{3,4} 12
measure(c)
}