اینترفیس‌های مهم

اینترفیس‌های پرکاربرد کتابخانه استاندارد: Stringer، error و sort.Interface.

اینترفیس‌های معروف کتابخانه استاندارد

۱. fmt.Stringer — نمایش رشته‌ای

اگر متد String() string داشته باشید، fmt.Println خودکار از آن استفاده می‌کند:

type Person struct {
    Name string
    Age  int
}

func (p Person) String() string {
    return fmt.Sprintf("%s (%d ساله)", p.Name, p.Age)
}

p := Person{"علی", 25}
fmt.Println(p)   ← علی (۲۵ ساله)

۲. error — مدیریت خطا

error خودش یک اینترفیس است:

type error interface {
    Error() string
}

هر نوعی با متد Error() string می‌تواند error باشد:

type ValidationError struct {
    Field string
}

func (e *ValidationError) Error() string {
    return "فیلد نامعتبر: " + e.Field
}

۳. sort.Interface — مرتب‌سازی سفارشی

type Interface interface {
    Len() int
    Less(i, j int) bool
    Swap(i, j int)
}

یا ساده‌تر با sort.Slice:

people := []Person{
    {"علی", 25},
    {"سارا", 30},
    {"رضا", 20},
}

sort.Slice(people, func(i, j int) bool {
    return people[i].Age < people[j].Age
})

۴. io.Reader و io.Writer

ستون فقرات I/O در Go:

type Reader interface { Read(p []byte) (n int, err error) }
type Writer interface { Write(p []byte) (n int, err error) }

فایل، شبکه، بافر، HTTP response — همه Reader/Writer هستند!

۵. comparable — قابل مقایسه

انواعی که با == قابل مقایسه‌اند:

func Contains[T comparable](list []T, target T) bool {
    for _, v := range list {
        if v == target {
            return true
        }
    }
    return false
}

جدول جمع‌بندی

اینترفیسمتدکاربرد
fmt.StringerString() stringنمایش سفارشی در Print
errorError() stringمدیریت خطا
sort.InterfaceLen, Less, Swapمرتب‌سازی سفارشی
io.ReaderRead()خواندن داده
io.WriterWrite()نوشتن داده
any—هر نوعی

این مبحث بخشی از دوره آموزش کامل گو است.

ابزارهای مرتبط