<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های saeed mohammadian</title><link>https://virgool.ir/feed/@hatrena</link><description></description><language>fa</language><pubDate>2026-11-12 03:45:21</pubDate><image><url>https://files.virgool.ir/upload/users/243832/avatar/avatar.png</url><title>saeed mohammadian</title><link>https://virgool.ir/@hatrena</link></image><item><title>Golang Interface - مقدماتی</title><link>https://virgool.ir/golangpub/golang-interface-مقدماتی-m4kvy0attjua</link><description>اینترفیس به طور کلی یعنی روشی که بشه باهاش رفتار یه ابجکت رو تعریف کرد و ابجکت هم باید تمام اون رفتار ها رو انجام بده. و آبجکت خودش تصمیم میگیره چگونه این رفتار هارو انجام بده. برای مثال, ماشین لباسشویی ۲ تا رفتار شستن و خشک کردن داره. هر مدل ماشین لباسشوئی باید این ۲ رفتار رو انجام بده ولی به روش خودشون.- برای ساده سازی تمام کد ها داخل یک فایل نوشته شدن - go version go1.14.4 darwin/amd64حالا اولین قسمت کد را با هم بررسی می کنیم:package main&#xA;&#xA;import (&#xA;   &#34;fmt&#34;&#xA;)&#xA;&#xA;//interface definition&#xA;type WashingMachine interface {&#xA;   Clean() string&#xA;   Dry() string&#xA;}&#xA;&#xA;type SamsungModel struct {&#xA;   model string&#xA;}&#xA;&#xA;//SamsungModel implements Clean&#xA;func (s SamsungModel) Clean() string {&#xA;   return fmt.Sprintf(&#34;Samsung model %s is cleaning&#34;, s.model)&#xA;}&#xA;&#xA;//SamsungModel implements Dry&#xA;func (s SamsungModel) Dry() string {&#xA;   return fmt.Sprintf(&#34;Samsung model %s is drying&#34;, s.model)&#xA;}&#xA;&#xA;func main() {&#xA;   wm := SamsungModel{&#34;SM001&#34;}&#xA;   var v WashingMachine&#xA;   v = wm&#xA;&#xA;   fmt.Println(v.Clean())&#xA;   fmt.Println(v.Dry())&#xA;} اولین قسمت کد تعریف اینترفیس `WashingMachine` است. که مشخص میکنه هر مدل ماشین لباسشویی باید ۲ تا کار `Clean` و `Dry` را حتمن انجام بده. حالا صرف نظر از تعریف اینترفیس, میایم مدل `SamsungModel` را تعریف میکنیم.  قسمت مهم کد `v = wm` هست که تایید میکنه `SamsungModel`باید از اینترفیس `WashingMachine` تبعیت کنه. خود `SamsungModel` تصمیم میگیرد که متد های `Clean`و `Dry` را چگونه پیاده سازی کنن ولی نوع خروجی هر کدام باید به اینترفیس یکسان باشن. خروجی کد بالا باید همچین چیزی باشه:Samsung model SM001 is cleaningSamsung model SM001 is dryingحالا بیایم یه مدل جدید اضافه کنیم:package main&#xA;&#xA;import (&#xA;   &#34;fmt&#34;&#xA;)&#xA;&#xA;//interface definition&#xA;type WashingMachine interface {&#xA;   Clean() string&#xA;   Dry() string&#xA;}&#xA;&#xA;type SamsungModel struct {&#xA;   model string&#xA;}&#xA;&#xA;//SamsungModel implements Clean&#xA;func (s SamsungModel) Clean() string {&#xA;   return fmt.Sprintf(&#34;Samsung model %s is cleaning&#34;, s.model)&#xA;}&#xA;&#xA;//SamsungModel implements Dry&#xA;func (s SamsungModel) Dry() string {&#xA;   return fmt.Sprintf(&#34;Samsung model %s is drying&#34;, s.model)&#xA;}&#xA;&#xA;type LGModel struct {&#xA;   model string&#xA;   year  int&#xA;}&#xA;&#xA;//LGModel implements Clean&#xA;func (l LGModel) Clean() string {&#xA;   return fmt.Sprintf(&#34;LG model %s, year %d is cleaning&#34;, l.model, l.year)&#xA;}&#xA;&#xA;//LGModel implements Dry&#xA;func (l LGModel) Dry() string {&#xA;   return fmt.Sprintf(&#34;LG model %s, year %d is drying&#34;, l.model, l.year)&#xA;}&#xA;&#xA;func main() {&#xA;   wm := SamsungModel{&#34;SM001&#34;}&#xA;   var v WashingMachine&#xA;   v = wm&#xA;&#xA;   wm2 := LGModel{&#34;LG001&#34;, 2020}&#xA;   var v2 WashingMachine&#xA;   v2 = wm2&#xA;&#xA;   fmt.Println(v.Clean())&#xA;   fmt.Println(v.Dry())&#xA;&#xA;   fmt.Println(v2.Clean())&#xA;   fmt.Println(v2.Dry())&#xA;}کاری که کردیم دقیقن مثل حالت اول هست با این تغییر که مدل جدید روشه خودش رو برای `Clean` و `Dry` انجام  میده. ولی ساختن مدل به این روش تمیز نیست. بیاین یکم ساختن مدل هارو ساده تر کنیم. فانکشن `main` نهایتا میشه :func main() {&#xA;   wm := SamsungModel{&#34;SM001&#34;}&#xA;   wm2 := LGModel{&#34;LG001&#34;, 2020}&#xA;&#xA;   models := []WashingMachine{wm, wm2}&#xA;&#xA;   fmt.Println(models[0].Clean())&#xA;   fmt.Println(models[0].Dry())&#xA;}حالا میشه یه  فانکشن نوشت که هر ۲ مدل بتونن ازش استفاده کنن والی جز اینترفیس نباشه:...&#xA;&#xA;func list(wm WashingMachine) {&#xA;   fmt.Println(wm.Clean())&#xA;   fmt.Println(wm.Dry())&#xA;}&#xA;&#xA;func main() {&#xA;   wm := SamsungModel{&#34;SM001&#34;}&#xA;   var v WashingMachine = wm&#xA;&#xA;   list(v)&#xA;}</description><category>saeed mohammadian</category><author>saeed mohammadian</author><pubDate>Wed, 12 Aug 2020 20:50:52 +0430</pubDate></item></channel></rss>