20.آموزش GO با مثال(اینترفیس ها)

اینترفیس ها کالکشن هایی نام گذاری شده از اثر متد ها هستند .

package main
import "fmt"
import "math"

اینجا یه اینترفیس اولیه برای شکل های هندسی داریم.

type geometry interface {
    area() float64
    perim() float64
}

برای مثالمون ما این اینترفیس رو روی انواع rectو circle اجرا میکنیم.

type rect struct {
    width, height float64
}
type circle struct {
    radius float64
}

برای اجرای یک اینترفیس در گو, ما فقط نیاز داریم که تمام متدهای داخل اینترفیس رو اجرا کنیم.اینجا ماgeometryرا روی rectها اجرا میکنیم.

func (r rect) area() float64 {
    return r.width * r.height
}
func (r rect) perim() float64 {
    return 2*r.width + 2*r.height
}

پیاده سازی برای circleها.

func (c circle) area() float64 {
    return math.Pi * c.radius * c.radius
}
func (c circle) perim() float64 {
    return 2 * math.Pi * c.radius
}

اگر یک متغییر یک نوع اینترفیس داشته باشد, ما میتوانیم متد هایی که در اینترفیس نام گذاری شده اند را فراخوانی بنماییم. اینجا یک تابع جنریک measure از این موضوع برای بهره گیری روی هر geometryاستفاده میکند.

func measure(g geometry) {
    fmt.Println(g)
    fmt.Println(g.area())
    fmt.Println(g.perim())
}
func main() {
    r := rect{width: 3, height: 4}
    c := circle{radius: 5}

سازه های circle و rectهردو میتونن اینترفیس geometry را اجرا کنند بنا براین ما میتوانیم نمونه ای از این سازه ها را به عنوان آرگومان های measureاستفاده کنیم.

   measure(r)
    measure(c)
}

اجرای این برنامه

$ go run interfaces.go
{3 4}
12
14
{5}
78.53981633974483
31.41592653589793

برای یادگیری بیشتر در مورد اینترفیس ها این ، پست عالی بلاگ جردن را بررسی کنید.

<<متد ها------------------------------------------ خطاها>>