<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های saeed mohammadian</title>
        <link>https://virgool.io/feed/@hatrena</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-07 15:02:16</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/243832/avatar/avatar.png?height=120&amp;width=120</url>
            <title>saeed mohammadian</title>
            <link>https://virgool.io/@hatrena</link>
        </image>

                    <item>
                <title>Golang Interface - مقدماتی</title>
                <link>https://virgool.io/golangpub/golang-interface-%D9%85%D9%82%D8%AF%D9%85%D8%A7%D8%AA%DB%8C-m4kvy0attjua</link>
                <description>اینترفیس به طور کلی یعنی روشی که بشه باهاش رفتار یه ابجکت رو تعریف کرد و ابجکت هم باید تمام اون رفتار ها رو انجام بده. و آبجکت خودش تصمیم میگیره چگونه این رفتار هارو انجام بده. برای مثال, ماشین لباسشویی ۲ تا رفتار شستن و خشک کردن داره. هر مدل ماشین لباسشوئی باید این ۲ رفتار رو انجام بده ولی به روش خودشون.- برای ساده سازی تمام کد ها داخل یک فایل نوشته شدن - go version go1.14.4 darwin/amd64حالا اولین قسمت کد را با هم بررسی می کنیم:package main

import (
   &amp;quotfmt&amp;quot
)

//interface definition
type WashingMachine interface {
   Clean() string
   Dry() string
}

type SamsungModel struct {
   model string
}

//SamsungModel implements Clean
func (s SamsungModel) Clean() string {
   return fmt.Sprintf(&amp;quotSamsung model %s is cleaning&amp;quot, s.model)
}

//SamsungModel implements Dry
func (s SamsungModel) Dry() string {
   return fmt.Sprintf(&amp;quotSamsung model %s is drying&amp;quot, s.model)
}

func main() {
   wm := SamsungModel{&amp;quotSM001&amp;quot}
   var v WashingMachine
   v = wm

   fmt.Println(v.Clean())
   fmt.Println(v.Dry())
} اولین قسمت کد تعریف اینترفیس &#x60;WashingMachine&#x60; است. که مشخص میکنه هر مدل ماشین لباسشویی باید ۲ تا کار &#x60;Clean&#x60; و &#x60;Dry&#x60; را حتمن انجام بده. حالا صرف نظر از تعریف اینترفیس, میایم مدل &#x60;SamsungModel&#x60; را تعریف میکنیم.  قسمت مهم کد &#x60;v = wm&#x60; هست که تایید میکنه &#x60;SamsungModel&#x60;باید از اینترفیس &#x60;WashingMachine&#x60; تبعیت کنه. خود &#x60;SamsungModel&#x60; تصمیم میگیرد که متد های &#x60;Clean&#x60;و &#x60;Dry&#x60; را چگونه پیاده سازی کنن ولی نوع خروجی هر کدام باید به اینترفیس یکسان باشن. خروجی کد بالا باید همچین چیزی باشه:Samsung model SM001 is cleaningSamsung model SM001 is dryingحالا بیایم یه مدل جدید اضافه کنیم:package main

import (
   &amp;quotfmt&amp;quot
)

//interface definition
type WashingMachine interface {
   Clean() string
   Dry() string
}

type SamsungModel struct {
   model string
}

//SamsungModel implements Clean
func (s SamsungModel) Clean() string {
   return fmt.Sprintf(&amp;quotSamsung model %s is cleaning&amp;quot, s.model)
}

//SamsungModel implements Dry
func (s SamsungModel) Dry() string {
   return fmt.Sprintf(&amp;quotSamsung model %s is drying&amp;quot, s.model)
}

type LGModel struct {
   model string
   year  int
}

//LGModel implements Clean
func (l LGModel) Clean() string {
   return fmt.Sprintf(&amp;quotLG model %s, year %d is cleaning&amp;quot, l.model, l.year)
}

//LGModel implements Dry
func (l LGModel) Dry() string {
   return fmt.Sprintf(&amp;quotLG model %s, year %d is drying&amp;quot, l.model, l.year)
}

func main() {
   wm := SamsungModel{&amp;quotSM001&amp;quot}
   var v WashingMachine
   v = wm

   wm2 := LGModel{&amp;quotLG001&amp;quot, 2020}
   var v2 WashingMachine
   v2 = wm2

   fmt.Println(v.Clean())
   fmt.Println(v.Dry())

   fmt.Println(v2.Clean())
   fmt.Println(v2.Dry())
}کاری که کردیم دقیقن مثل حالت اول هست با این تغییر که مدل جدید روشه خودش رو برای &#x60;Clean&#x60; و &#x60;Dry&#x60; انجام  میده. ولی ساختن مدل به این روش تمیز نیست. بیاین یکم ساختن مدل هارو ساده تر کنیم. فانکشن &#x60;main&#x60; نهایتا میشه :func main() {
   wm := SamsungModel{&amp;quotSM001&amp;quot}
   wm2 := LGModel{&amp;quotLG001&amp;quot, 2020}

   models := []WashingMachine{wm, wm2}

   fmt.Println(models[0].Clean())
   fmt.Println(models[0].Dry())
}حالا میشه یه  فانکشن نوشت که هر ۲ مدل بتونن ازش استفاده کنن والی جز اینترفیس نباشه:...

func list(wm WashingMachine) {
   fmt.Println(wm.Clean())
   fmt.Println(wm.Dry())
}

func main() {
   wm := SamsungModel{&amp;quotSM001&amp;quot}
   var v WashingMachine = wm

   list(v)
}</description>
                <category>saeed mohammadian</category>
                <author>saeed mohammadian</author>
                <pubDate>Wed, 12 Aug 2020 19:50:52 +0430</pubDate>
            </item>
            </channel>
</rss>