Gopher Academy
🎯ویژگی های شی گرایی در گولنگ 🎯 🔹Struct 🔹Method 🔹Embedding 🔹Encapsulation 🔹Interface 🔹Inheritance 🔹Polymorphism 🔹Conclusion ➖➖➖➖➖➖➖➖➖ 🔰 @gopher_academy
❌Embedding❌
تعریف یک استراکت در استراکت دیگر
مانند نمونه فوق
نموه ای ااز این حالت هست
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
تعریف یک استراکت در استراکت دیگر
مانند نمونه فوق
نموه ای ااز این حالت هست
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy
🎯ویژگی های شی گرایی در گولنگ 🎯 🔹Struct 🔹Method 🔹Embedding 🔹Encapsulation 🔹Interface 🔹Inheritance 🔹Polymorphism 🔹Conclusion ➖➖➖➖➖➖➖➖➖ 🔰 @gopher_academy
❌Encapsulation❌
متد ها یا استراکت های که با نام کوچک ایجاد می شوند در همان فایل یا پکیج قابل دسترس هستن در پکبج های دیگر قابل دسترس نیستن
این قابلیت Encapsulation
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
متد ها یا استراکت های که با نام کوچک ایجاد می شوند در همان فایل یا پکیج قابل دسترس هستن در پکبج های دیگر قابل دسترس نیستن
این قابلیت Encapsulation
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
❌ابزار هایی برای زبان فارسی❌
🔹لینک کتابخانه در گیتهاب👇🏻
🔺github.com/mavihq/persian
🔹طریقه نصب
🔺go get github.com/mavihq/persian
🔹متد ها
🔺.ToPersianDigits
🔹تمامی اعداد در رشته رو به اعداد فارسی تبدیل میکند
🔺persian.ToPersianDigits("123salam456")
=> "۱۲۳salam۴۵۶"
.ToPersianDigitsFromInt
🔹تمامی اعداد در رشته رو به اعداد فارسی تبدیل میکند
🔺persian.ToPersianDigitsFromInt(123)
=> "۱۲۳"
.ToEnglishDigits
🔹تمامی اعداد در رشته رو به اعداد انگلیسی تبدیل میکند
🔺persian.ToEnglishDigits("۱۲۳salam۴۵۶")
=> "123salam456"
.OnlyEnglishNumbers
🔹در متن تمامی حروف را حذف کرده و فقط اعداد انگلیسی میمانند.
🔺persian.OnlyEnglishNumbers("123salam۴۵۶")
=> "123"
.OnlyPersianNumbers
🔹در متن تمامی حروف را حذف کرده و فقط اعداد فارسی میمانند.
🔺persian.OnlyPersianNumbers("123salam۴۵۶")
=> "۴۵۶"
.SwitchToPersianKey
🔹تمامی حروف در رشته رو به معادل فارسی شان تبدیل میکند
🔺persian.SwitchToPersianKey("sghl o,fd ? o,fl llk,k")
=> "سلام خوبی ؟ خوبم ممنون"
.SwitchToEnglishKey
🔹تمامی حروف در رشته رو به معادل انگلیسی شان تبدیل میکند
🔺persian.SwitchToEnglishKey("اثغ صاشفس عح ؟")
=> "hey whats up ?"
.Currency
🔹اعداد در رشته را به صورت نوشتاری پول تبدیل میکند.
🔺persian.Currency("1234567")
=> "۱،۲۳۴،۵۶۷"
.Toman
🔹اعداد در رشته را به صورت نوشتاری پول با پسوند تومان تبدیل میکند.
🔺persian.Toman("1234567")
=> "۱،۲۳۴،۵۶۷ تومان"
.Rial
🔹اعداد در رشته را به صورت نوشتاری پول با پسوند ریال تبدیل میکند.
🔺persian.Rial("1234567")
=> "۱،۲۳۴،۵۶۷ ﷼"
.FixArabic
🔹کاراکتر های عربی در رشته را به معادل فارسی شان تبدیل میکند.
🔺persian.FixArabic("کوروش")
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🔹لینک کتابخانه در گیتهاب👇🏻
🔺github.com/mavihq/persian
🔹طریقه نصب
🔺go get github.com/mavihq/persian
🔹متد ها
🔺.ToPersianDigits
🔹تمامی اعداد در رشته رو به اعداد فارسی تبدیل میکند
🔺persian.ToPersianDigits("123salam456")
=> "۱۲۳salam۴۵۶"
.ToPersianDigitsFromInt
🔹تمامی اعداد در رشته رو به اعداد فارسی تبدیل میکند
🔺persian.ToPersianDigitsFromInt(123)
=> "۱۲۳"
.ToEnglishDigits
🔹تمامی اعداد در رشته رو به اعداد انگلیسی تبدیل میکند
🔺persian.ToEnglishDigits("۱۲۳salam۴۵۶")
=> "123salam456"
.OnlyEnglishNumbers
🔹در متن تمامی حروف را حذف کرده و فقط اعداد انگلیسی میمانند.
🔺persian.OnlyEnglishNumbers("123salam۴۵۶")
=> "123"
.OnlyPersianNumbers
🔹در متن تمامی حروف را حذف کرده و فقط اعداد فارسی میمانند.
🔺persian.OnlyPersianNumbers("123salam۴۵۶")
=> "۴۵۶"
.SwitchToPersianKey
🔹تمامی حروف در رشته رو به معادل فارسی شان تبدیل میکند
🔺persian.SwitchToPersianKey("sghl o,fd ? o,fl llk,k")
=> "سلام خوبی ؟ خوبم ممنون"
.SwitchToEnglishKey
🔹تمامی حروف در رشته رو به معادل انگلیسی شان تبدیل میکند
🔺persian.SwitchToEnglishKey("اثغ صاشفس عح ؟")
=> "hey whats up ?"
.Currency
🔹اعداد در رشته را به صورت نوشتاری پول تبدیل میکند.
🔺persian.Currency("1234567")
=> "۱،۲۳۴،۵۶۷"
.Toman
🔹اعداد در رشته را به صورت نوشتاری پول با پسوند تومان تبدیل میکند.
🔺persian.Toman("1234567")
=> "۱،۲۳۴،۵۶۷ تومان"
.Rial
🔹اعداد در رشته را به صورت نوشتاری پول با پسوند ریال تبدیل میکند.
🔺persian.Rial("1234567")
=> "۱،۲۳۴،۵۶۷ ﷼"
.FixArabic
🔹کاراکتر های عربی در رشته را به معادل فارسی شان تبدیل میکند.
🔺persian.FixArabic("کوروش")
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
❌چگونگی استفاد از پکیج ها❌
🔹وقتی که یک اسم برای پکیج انتخاب می کنیم، در ذهنتون باشه که هر جایی که بخواهیم اون رو صدا بزنیم باید نام همون پکیج رو صدا بزنیم که بتونیم توابع اون پکیج رو اجرا کنیم و یا از اون استفاده کنیم.
🔹سعی کنید نام پکیج های شما مختلف باشند. یعنی مشابه هم نباشند. حتی با کتابخانه های استاندارد هم تفاوت داشته باشند که هیچوقت دچار مشکل نشوید
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🔹وقتی که یک اسم برای پکیج انتخاب می کنیم، در ذهنتون باشه که هر جایی که بخواهیم اون رو صدا بزنیم باید نام همون پکیج رو صدا بزنیم که بتونیم توابع اون پکیج رو اجرا کنیم و یا از اون استفاده کنیم.
🔹سعی کنید نام پکیج های شما مختلف باشند. یعنی مشابه هم نباشند. حتی با کتابخانه های استاندارد هم تفاوت داشته باشند که هیچوقت دچار مشکل نشوید
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
❌Package main ❌
🔹برای کامپایل کردن کدها ما مجبوریم که این پکیج رو تعریف کنیم و به اون نیاز داریم. داخل package main یک function وجود داره به نام function main که اون هم نیاز هست که 100% تعریف بشه و تا تعریف نشه نمیتونیم کدمون رو کامپایل کنیم.
🔹بنابراین در نظر داشته باشید که کدهای اصلی ما در package main قرار می گیرند و بقیه کدها می تونن یه جور کتابخونه باشن که ایمپورت میشن داخل این پکیج.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🔹برای کامپایل کردن کدها ما مجبوریم که این پکیج رو تعریف کنیم و به اون نیاز داریم. داخل package main یک function وجود داره به نام function main که اون هم نیاز هست که 100% تعریف بشه و تا تعریف نشه نمیتونیم کدمون رو کامپایل کنیم.
🔹بنابراین در نظر داشته باشید که کدهای اصلی ما در package main قرار می گیرند و بقیه کدها می تونن یه جور کتابخونه باشن که ایمپورت میشن داخل این پکیج.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
❌اسم ها در زبان go به چه صورت هستند؟❌
🔹در زبان go نیز مانند دیگر زبان ها، اسم ها دارای اهمیت هستند.
🔹در اسامی پکیج ها هیچگاه نباید از علامت هایی مانند (: _ -) استفاده کنیم. و اینکه پکیج شما دارای اسم کوتاه، مختصر و مفیدی باشد از اهمیت بسیار بالایی برخوردار است. (بقول وب سایت گولنگ، اسمی که برای پکیج استفاده می کنید تحریک آمیز باشد)
🔹اسمی که برای پکیج استفاده می کنیم سعی کنیم lower case و single-word باشد. یعنی اینکه یک لغت یا یک اسم داشته باشد و با حروف کوچک نوشته شود.
🔹همچنین سعی کنید function name هم طولانی نباشد. طولانی نوشتن اسم ها همیشه باعث سردرگمی میشود.
🔹پس به خاطر داشته باشید که طولانی بودن اسامی، یک نکته خوب نیست و همه چیز رو بیان نمیکنه و همینطور حرف اول آن ها با حروف بزرگ شروع شود.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🔹در زبان go نیز مانند دیگر زبان ها، اسم ها دارای اهمیت هستند.
🔹در اسامی پکیج ها هیچگاه نباید از علامت هایی مانند (: _ -) استفاده کنیم. و اینکه پکیج شما دارای اسم کوتاه، مختصر و مفیدی باشد از اهمیت بسیار بالایی برخوردار است. (بقول وب سایت گولنگ، اسمی که برای پکیج استفاده می کنید تحریک آمیز باشد)
🔹اسمی که برای پکیج استفاده می کنیم سعی کنیم lower case و single-word باشد. یعنی اینکه یک لغت یا یک اسم داشته باشد و با حروف کوچک نوشته شود.
🔹همچنین سعی کنید function name هم طولانی نباشد. طولانی نوشتن اسم ها همیشه باعث سردرگمی میشود.
🔹پس به خاطر داشته باشید که طولانی بودن اسامی، یک نکته خوب نیست و همه چیز رو بیان نمیکنه و همینطور حرف اول آن ها با حروف بزرگ شروع شود.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
❌استخدام Golang Developer
🔴 https://jobinja.ir/617746
🔴 https://jobinja.ir/621696
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🔴 https://jobinja.ir/617746
🔴 https://jobinja.ir/621696
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🥳 Go 1.16 Release Candidate 1 is released!
📈 Run it in dev! Run it in prod! File bugs! https://t.co/rE2eWdtehW
🗣 Announcement: https://t.co/KhM3boDDg0
📦 Download: https://t.co/pBTcUrfO1R
#golang https://t.co/KlpF4NCXdB
📈 Run it in dev! Run it in prod! File bugs! https://t.co/rE2eWdtehW
🗣 Announcement: https://t.co/KhM3boDDg0
📦 Download: https://t.co/pBTcUrfO1R
#golang https://t.co/KlpF4NCXdB
GitHub
GitHub is where people build software. More than 56 million people use GitHub to discover, fork, and contribute to over 100 million projects.
Gopher Academy
🎯ویژگی های شی گرایی در گولنگ 🎯 🔹Struct 🔹Method 🔹Embedding 🔹Encapsulation 🔹Interface 🔹Inheritance 🔹Polymorphism 🔹Conclusion ➖➖➖➖➖➖➖➖➖ 🔰 @gopher_academy
❌Inheritance❌
در شیئگرایی مواقعی پیش میآید که آبجکتها برخی خصوصیاتشان مشابه یکدیگر است اما در عین حال یک سری تفاوتها هم با همدیگر دارند و اینجا است که به منظور جلوگیری از دوبارهکاری و نوشتن کدهای تکراری، میتوانیم از مفهومی تحت عنوان Inheritance به معنای «وراثت» بهره بگیریم. به کلام سادهتر، میتوان سازوکاری اندیشید تا یک کلاس برخی خصوصیاتش را از کلاس دیگری به ارث ببرد اما در عین حال ویژگیهای خاص خود را هم داشته باشد که در چنین فضایی، تا حد ممکن از دوبارهکاری جلوگیری به عمل خواهد آمد.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
در شیئگرایی مواقعی پیش میآید که آبجکتها برخی خصوصیاتشان مشابه یکدیگر است اما در عین حال یک سری تفاوتها هم با همدیگر دارند و اینجا است که به منظور جلوگیری از دوبارهکاری و نوشتن کدهای تکراری، میتوانیم از مفهومی تحت عنوان Inheritance به معنای «وراثت» بهره بگیریم. به کلام سادهتر، میتوان سازوکاری اندیشید تا یک کلاس برخی خصوصیاتش را از کلاس دیگری به ارث ببرد اما در عین حال ویژگیهای خاص خود را هم داشته باشد که در چنین فضایی، تا حد ممکن از دوبارهکاری جلوگیری به عمل خواهد آمد.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy
❌Inheritance❌ در شیئگرایی مواقعی پیش میآید که آبجکتها برخی خصوصیاتشان مشابه یکدیگر است اما در عین حال یک سری تفاوتها هم با همدیگر دارند و اینجا است که به منظور جلوگیری از دوبارهکاری و نوشتن کدهای تکراری، میتوانیم از مفهومی تحت عنوان Inheritance به معنای…
👆🏻👆🏻👆🏻توضیحات بیشتر در این زمینه👆🏻👆🏻👆🏻
🔹ایدهٔ وراثت به نوعی برگرفته از دنیای واقعی است. در واقع، همانطور که فرزند برخی خصوصیات خود را از والد به ارث میبرد، یک کلاس زیرشاخه که معمولاً تحت عنوان Child Class شناخته میشود نیز میتواند برخی خصوصیاتش را از کلاس اصلی ارثبری کند که اصطلاحاً Parent Class نام دارد. به طور کلی، انواع مختلفی از وراثت در شیئگرایی داریم که عبارتند از:
- Single Inheritance:
🔹به عبارتی، یک کلاس فرزند داریم که کلیهٔ خصوصیاتش را از کلاس والد به ارث میبرد.
- Multi-level Inheritance:
🔹در این مدل از وراثت، خود کلاس والد نیز میتواند کلاس والد دیگری داشته باشد. به بیانی بهتر، کلاس فرزند خصوصیات خود را از کلاس پدر به ارث میبرد و کلاس پدر نیز خصوصیاتش را از کلاس پدربزرگ به ارث خواهد برد تا جایی که میتوان گفت کلیهٔ خصوصیات پدربزرگ در کلاس فرزند نیز موجود هستند.
- Multiple Inheritance:
🔹 وراثت چندگانه در خیلی از زبانها مثل پیاچپی ساپورت نمیشود و حاکی از آن است که یک کلاس فرزند خصوصیاتش را از بیش از یک کلاس والد به ارث ببرد.
- Hierarchical Inheritance:
🔹 اساساً چنانچه بیش از یک کلاس (فرزند) از کلاس والد ارثبری کنند، گفته میشود که مدل وراثت Hierarchical است. به طور مثال، در اپ WhatsApp یک پیام میتواند در قالب متن، صوت و یا تصویر ارسال گردد؛ مثلاً فرض کنیم که یک کلاس Message داریم که کلاسهای فرزندی همچون AudioMessage ،TextMessage و PhotoMessage از آن ارثبری میکنند.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🔹ایدهٔ وراثت به نوعی برگرفته از دنیای واقعی است. در واقع، همانطور که فرزند برخی خصوصیات خود را از والد به ارث میبرد، یک کلاس زیرشاخه که معمولاً تحت عنوان Child Class شناخته میشود نیز میتواند برخی خصوصیاتش را از کلاس اصلی ارثبری کند که اصطلاحاً Parent Class نام دارد. به طور کلی، انواع مختلفی از وراثت در شیئگرایی داریم که عبارتند از:
- Single Inheritance:
🔹به عبارتی، یک کلاس فرزند داریم که کلیهٔ خصوصیاتش را از کلاس والد به ارث میبرد.
- Multi-level Inheritance:
🔹در این مدل از وراثت، خود کلاس والد نیز میتواند کلاس والد دیگری داشته باشد. به بیانی بهتر، کلاس فرزند خصوصیات خود را از کلاس پدر به ارث میبرد و کلاس پدر نیز خصوصیاتش را از کلاس پدربزرگ به ارث خواهد برد تا جایی که میتوان گفت کلیهٔ خصوصیات پدربزرگ در کلاس فرزند نیز موجود هستند.
- Multiple Inheritance:
🔹 وراثت چندگانه در خیلی از زبانها مثل پیاچپی ساپورت نمیشود و حاکی از آن است که یک کلاس فرزند خصوصیاتش را از بیش از یک کلاس والد به ارث ببرد.
- Hierarchical Inheritance:
🔹 اساساً چنانچه بیش از یک کلاس (فرزند) از کلاس والد ارثبری کنند، گفته میشود که مدل وراثت Hierarchical است. به طور مثال، در اپ WhatsApp یک پیام میتواند در قالب متن، صوت و یا تصویر ارسال گردد؛ مثلاً فرض کنیم که یک کلاس Message داریم که کلاسهای فرزندی همچون AudioMessage ،TextMessage و PhotoMessage از آن ارثبری میکنند.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
Gopher Academy
🎯ویژگی های شی گرایی در گولنگ 🎯 🔹Struct 🔹Method 🔹Embedding 🔹Encapsulation 🔹Interface 🔹Inheritance 🔹Polymorphism 🔹Conclusion ➖➖➖➖➖➖➖➖➖ 🔰 @gopher_academy
❌Polymorphism❌
واژهٔ Poly در زبان یونانی به معنی «چند» است و Morph نیز به معنای «شکل» است که روی هم رفته میتوان معادلی همچون «چندشکلی/چندریختی» برایش در نظر گرفت. برای درک بهتر Polymorphism، نیاز است تا با مفهومی در شیئگرایی آشنا گردیم به نام اینترفیس که این امکان را برایمان فراهم میآورد تا یک ساختار کلی طراحی نموده سپس کلاسهای مد نظرمان را موظف به تبعیت از آن ساختار کنیم اما در عین حال هر کلاس میتواند پیادهسازی خاص خود را از آن ساختار داشته باشد؛ به عبارتی، آن ساختار کلی میتواند به اَشکال مختلفی پیادهسازی شود و این همان مفهوم چندشکلی است.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
واژهٔ Poly در زبان یونانی به معنی «چند» است و Morph نیز به معنای «شکل» است که روی هم رفته میتوان معادلی همچون «چندشکلی/چندریختی» برایش در نظر گرفت. برای درک بهتر Polymorphism، نیاز است تا با مفهومی در شیئگرایی آشنا گردیم به نام اینترفیس که این امکان را برایمان فراهم میآورد تا یک ساختار کلی طراحی نموده سپس کلاسهای مد نظرمان را موظف به تبعیت از آن ساختار کنیم اما در عین حال هر کلاس میتواند پیادهسازی خاص خود را از آن ساختار داشته باشد؛ به عبارتی، آن ساختار کلی میتواند به اَشکال مختلفی پیادهسازی شود و این همان مفهوم چندشکلی است.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
برای اینکه یک تابع anonymous بتونه خودشو به صورت بازگشتی فراخوانی کنه , باید ابتدا یک متغیر تعریف کنیم و سپس تابع anonymous رو بهش نسبت بدیم. در غیر اینصورت تابع تعریف شده قابل فراخوانی به صورت بازگشتی نخواهد بود.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🎯 ریپازیتوری چیست و چرا باید ازش استفاده کنیم ؟🎯
✅ ریپازیتوری یک استراتژی برای دسترسی به داده ها است.
✅ ریپازیتوری در حقیقت مانع تکرار در نوشتن Logic پروژه و Query های شما خواهد شد
✅ به حداقل رساندن وابستگی لایه دیتا به تکنولوژی ها
✅ از موضوعهای مهم دیگر میتوان به تست واحد پروژه اشاره کرد که قطعا با استفاده از Repository Pattern بسیار سادهتر و قابل اطمینانتر است.
✅ یکی دیگر از دلایل استفاده از ریپوزیتوری این است که سوئیچ کردن از یک دیتابیس به دیتابیس دیگر بسیار مشکلات کمتری را خواهد داشت. که این موضوع به دلیل جدا بودن پروژه شما از کوئریهای مختلف در کلاسهای متفاوت است.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
✅ ریپازیتوری یک استراتژی برای دسترسی به داده ها است.
✅ ریپازیتوری در حقیقت مانع تکرار در نوشتن Logic پروژه و Query های شما خواهد شد
✅ به حداقل رساندن وابستگی لایه دیتا به تکنولوژی ها
✅ از موضوعهای مهم دیگر میتوان به تست واحد پروژه اشاره کرد که قطعا با استفاده از Repository Pattern بسیار سادهتر و قابل اطمینانتر است.
✅ یکی دیگر از دلایل استفاده از ریپوزیتوری این است که سوئیچ کردن از یک دیتابیس به دیتابیس دیگر بسیار مشکلات کمتری را خواهد داشت. که این موضوع به دلیل جدا بودن پروژه شما از کوئریهای مختلف در کلاسهای متفاوت است.
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🎯 درود دوستان بنده قصد دارم توی ریپوی زیر از تجربیاتی که دیگران توی مصاحبه گولنگ داشتن رو جمع آوری کنم.🎯
🎯 پس دوستانی که مصاحبه گولنگ داشتن برامون توی ریپوی زیر pull request بزنن تا به اشتراک بزاریم برای سایر افراد ی که وارد این حوزه میشن🎯
🙏🏿❤️🙏🏿
🔗 https://github.com/mrbardia72/Go-Interview-Questions-And-Answers
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy
🎯 پس دوستانی که مصاحبه گولنگ داشتن برامون توی ریپوی زیر pull request بزنن تا به اشتراک بزاریم برای سایر افراد ی که وارد این حوزه میشن🎯
🙏🏿❤️🙏🏿
🔗 https://github.com/mrbardia72/Go-Interview-Questions-And-Answers
➖➖➖➖➖➖➖➖➖
🔰 @gopher_academy