اینترفیس ها کالکشن هایی نام گذاری شده از اثر متد ها هستند .
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
برای یادگیری بیشتر در مورد اینترفیس ها این ، پست عالی بلاگ جردن را بررسی کنید.
<<متد ها------------------------------------------ خطاها>>