Interface in Go

golang

#1

سلام خدمت همه دوستان
من مدتیه با زبان Go دارم کار میکنم .تو مبحث interface هرچقد بیشتر میخونم بیشتر نمیفهمم چیه الانم تو کدام ازش استفاده میکنم اما دقیق نمیدونم چیه ، تو اکثر کتابا اومدن با مثال دایره مستطیل مطرحش کردن و من واقعا سردرگم شدم اگر کسی میتونه با مثال کاربردی و ساده برام توضیح بده واقعا لطف بزرگی میکنه


#2

Interface ها رو میشه به عنوان قرارداد نگاه کرد

type person interface {
    name() string
}

هر تایپی که فانکشن name و داشته باشه interface بالا رو درست میکنه

type Student struct {
    firstname, lastname string
}

func (s Student) name() string {
    return s.firstname +" "+ s.lastname 
}

در اینجا تایپ student
اینترفیس person رو قانع میکنه یعنی هر فانکشنی که person به عنوان ارگومنت میگیره میتونه student هم بگیره

func printName(p person) {
	fmt.Println("Hello " + p.name())
}


func main() {
	student := Student{firstname: "sherlock", lastname:"holmes"}
	printName(student)
}

https://play.golang.org/p/vAv0sea8pM


#3

قانع میکنه یعنی چی میشه بیشتر توضیح بدین ؟


#4

یعنی هر تایپی که name() string داره person حساب میاد و چون student فانکشن name() string داره میشه در هرجا که person به کار. میره استفاده بشه


#5

در جاوا و scala و خیلی زبان های دیگه این مبحث موجوده


#6

بله اما در Go کمی متفاوته ، در کل باید بگم اگر ابتدای یادگیری این زبان بودم بدون شک ولش میکردم و بر خلاف جنجال و سروصدایی که گوگل برای این زبان کرده من اصلاً ازش راضی نیستم.راستی بابت کمک تشکر


#7

package main

import “fmt”

type Data interface{}

func main() {
var v1 Data
v1 = 23
fmt.Print(v1)
var str string
str = "hello :("
v1 = str
fmt.Print(v1)
}

سلام کد بالا میشه رو بی زحمت توضیح بدین ، تایپ اینترفیس رو اگه در این حالت استفاده کنم مشکلی نداره ؟ چطوری ممکنه تایپ اینترفیس هر نوع داده ای رو قبول کنه بدون خطا ؟


#8
type Data interface{}

در اینجا چون تایپ Data , اینترفیس خالیه هرتایپیو میشه براش استفاده کرد در Go این یک روش برای رسیدن به Dynamic typing مثله روبیه ولی این کار اصلا تشویق نمیشه مگر اینکه واقعا بهش نیاز باشه یکی از امتیاز های Go بر Python و Ruby چک شدن تایپ در compile time هست که از خطا جلوگیری میکنه
{}interface این مزایا رو میگیره


#9

اها ممنون از پاسخ
پس استفاده نکنم بهتره درسته
یکی هم راستی چرا میگن دینامیک تایپ تو پروژه های بزرگ مشکل ایجاد میکنه ؟ علتش چیه ؟منظور از مقیاس بزرگ تا چه حدی هست ؟


#10

این لینک قشنگ بود دلم نیومد شماها نخونین samdvr
توماج جان خوشحالم میشم شما هم مطالعه کنید دو هفته پیش مقاله ای باعث شد بفهمم چرا نود جی اس به هیچ وجه قابل مقایسه با الکسیر نیست و به جاهلیت خودم خندیدم


#11

به خاطر اینکه درستی تایپ در compile time مشخص میشه که بسیاری از خطا ها قبل اینکه کد برسه به اجرا میگیره به علاوه در زبان های statically typed با وجود ابزار ها و ide میشه به راحتی تایپ یک متغیرو دید اما در زبان های داینمیک باید بگردی از فایل به فایل تا بفهمی نوع متغیر چیه. هر پروژه ای که تمام کاراییش درذهن نمیگنجه به نظر من بزرگه


#12

واو عجب نکته جالبی بود دقت نکرده بودم .
من فکر میکردم بخاطر چک کردن تایپ در قبال ورودی هایی یا داده هایی با تایپ مختلفه که باعث میشه دینامیک تایپ کار رو سخت کنه.


#13

بهرحال تشکر و ممنون


استفاده از protocol