1. 程式人生 > >go語言中interface的實踐

go語言中interface的實踐

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