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)
}