Gopher Academy
3.34K subscribers
918 photos
40 videos
279 files
1.99K links
🕸 Gopher Academy

🔷interview golang
https://github.com/mrbardia72/Go-Interview-Questions-And-Answers

حمایت مالی:
https://www.coffeete.ir/mrbardia72

ادمین:
@mrbardia72
Download Telegram
🔴Default Values🔴

چیزی که خیلی مهمه تا بدونید مقدار پیش فرض در پروتوبافه، تمام فیلدها مقدار پیش‌فرض دارن،
برای بولین مقدار false هستش،
برای نامبر عدد ۰ هستش،
برای استرینگ یک رشته خالی،
برای بایت یک رشته بایت خالی،
برای ای‌نام (enum) اولین مقدار لیست،
برای آرایه یک آرایه خالی.

تمام فیلدهایی که بعد از اجرای برنامه مقدار دهی نشن، شناخته نشن و... مقدار پیش‌فرض رو میگیرن.

🔰 @gopher_academy
🔴معماری سیستم استخراج و ذخیره‌سازی اطلاعات زمان پخش🔴

https://vrgl.ir/OXIPO


🔰 @gopher_academy
Gopher Academy
🔴آموزش proto3 از صفر تا صد🔴 proto? 🔴https://t.me/gopher_academy/627 Defining A Message Type 🔴 https://t.me/gopher_academy/628 Assigning Field Numbers 🔴https://t.me/gopher_academy/629 Adding Comments 🔴 https://t.me/gopher_academy/630 Reserved Fields…
🔴Enumerations🔴
اگر با ای‌نام آشنا نیستید باید بگم یک لیست از مقدایره، همونطور که بولین یک لیست دوتایی از true و false هستش، ای‌نام میتونه یک لیست چندتایی از هر تایپی باشه.

اگر فراموش کردید باید دوباره بگم مقدار اول ای‌نام میشه مقدار پیش‌فرض، نباید اینو فراموش کنید.

ای‌نام باید از تگ ۰ شروع بشه که مقدار پیش‌فرض هستش.


🔰 @gopher_academy
Gopher Academy
🔴آموزش proto3 از صفر تا صد🔴 proto? 🔴https://t.me/gopher_academy/627 Defining A Message Type 🔴 https://t.me/gopher_academy/628 Assigning Field Numbers 🔴https://t.me/gopher_academy/629 Adding Comments 🔴 https://t.me/gopher_academy/630 Reserved Fields…
🔴Using Other Message Types🔴

آرایه‌ها در پروتوبافر با عنوان repeated شناخته میشن، برای مثال شاید بخوایم برای پروفایلی که داشتیم چندین شماره تلفن درنظر بگیریم، پس فایل رو به این صورت تغییر میدیم:
همینطور که میبینید فقط کافیه کلمه repeated قبل از تایپ فیلدمون اضافه کنیم.

🔰 @gopher_academy
Gopher Academy
🔴آموزش proto3 از صفر تا صد🔴 proto? 🔴https://t.me/gopher_academy/627 Defining A Message Type 🔴 https://t.me/gopher_academy/628 Assigning Field Numbers 🔴https://t.me/gopher_academy/629 Adding Comments 🔴 https://t.me/gopher_academy/630 Reserved Fields…
🔴Nested Types🔴

علاوه بر ای‌نام شما میتونید از مسیج‌های دیگه داخل مسیج اصلی‌تون استفاده کنید، اینکار خیلی سادس، تو نمونه بالا تاریخ تولد به پروفایل کاربر اضافه میکنیم:

🔰 @gopher_academy
بیزینس شما رشد میکنه و شما باید API هارو آپدیت کنید، بعضی فیلدها تغییر می‌کنند، بعضی فیلد‌ها اضافه و بعضی حدف میشن.

بیاید یه سناریو درنظر بگیریم، امروز موقع ثبت‌نام فقط نام و نام خانوادگی دریافت می‌کنید، ولی بعد یه مدت به شماره تلفن کاربران نیاز پیدا می‌کنید. ولی شما نمی‌تونید در یک لحظه فایل پروتو تمام اپلیکیشن‌هایی که دارن از سرویس شما استفاده می‌کنند آپدیت کنید.

خوشبختانه پروتوبافر اینجاهم به دادمون میرسه تا بتونیم بدون دردسر به توسعه اپ ادامه بدیم، پروتوباف full compatibe هست، اگر با این مفهوم آشنا نیستید به عکس بالا نگاه کنید:
در سناریو یک دیتا با فایل جدید نوشته میشه ولی با فایل قدیمی خونده میشه و مشکلی پیش نمیاد.

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

🔰 @gopher_academy
Gopher Academy
🔴آموزش proto3 از صفر تا صد🔴 proto? 🔴https://t.me/gopher_academy/627 Defining A Message Type 🔴 https://t.me/gopher_academy/628 Assigning Field Numbers 🔴https://t.me/gopher_academy/629 Adding Comments 🔴 https://t.me/gopher_academy/630 Reserved Fields…
🔴Updating A Message Type🔴
هیچوقت نباید تگ فیلدهارو تغییر بدیم.
شما می‌تونید فیلد جدید اضافه کنید، ولی اپلیکیشن با فایل پروتو قبلی اون فیلد‌هارو درنظر نمی‌گیره.
اگر اپلیکیشن شما بخواد فیلدی رو از ریکوئست دریافت کنه ولی نتونه پیداش کنه، مقدار پیش‌فرض درنظر میگیره. (به همین دلیله باید مقدار دیفالت رو بشناسید و مدیریتشون کنید)
همچنین فیلدها می‌تونند حذف بشن، ولی نباید دوباره تگ اون فیلد توی اون مسیج استفاده بشه. برای حذف می‌تونید به اول اسم فیلد OBSOLETE_ اضافه کنید یا تگ رو به reservet اضافه کنید.
تایپ های sint32 و sint64 با یکدیگر سازگار هستند اما با انواع دیگر عدد صحیح سازگار نیستند.
تایپ های string و byte ها تا زمانی که byte ها UTF-8 معتبر باشند سازگار هستند.
اگر byte ها دارای نسخه رمزگذاری شده پیام باشند ، پیام های با بایت سازگار هستند.
تایپ fixed32 با sfixed32 و fix64 با sfixed64 سازگار است.
تایپ های int32 ، uint32 ، int64 ، uint64 و bool همه با هم سازگار هستند - این بدان معناست که شما می توانید ، فیلدی را از یکی از این انواع به نوع دیگر تغییر دهید.
تایپ enum از نظر قالب با int32 ، uint32 ، int64 و uint64 سازگار است

🔰 @gopher_academy
Gopher Academy
🔴آموزش proto3 از صفر تا صد🔴 proto? 🔴https://t.me/gopher_academy/627 Defining A Message Type 🔴 https://t.me/gopher_academy/628 Assigning Field Numbers 🔴https://t.me/gopher_academy/629 Adding Comments 🔴 https://t.me/gopher_academy/630 Reserved Fields…
🔴Any🔴
تایپ Any شامل یک پیام دلخواه سریال به صورت بایت ، همراه با URL است که به عنوان یک شناسه پیام عمل می کند.
نوع پیش فرض URL برای نوع پیام داده شده است به صورت زیر
type.googleapis.com/_packagename_._messagename_

🔰 @gopher_academy
Gopher Academy
🔴آموزش proto3 از صفر تا صد🔴 proto? 🔴https://t.me/gopher_academy/627 Defining A Message Type 🔴 https://t.me/gopher_academy/628 Assigning Field Numbers 🔴https://t.me/gopher_academy/629 Adding Comments 🔴 https://t.me/gopher_academy/630 Reserved Fields…
🔴Oneof🔴
تایپ OneOf میگه فقط یکی از متغییرهایی که براش تعریف میکنیم می‌تونه مقدار داشته باشه.
در مسیج بالا داریم میگیم یه آیدی داریم و بعد از اون یکی از مقادیر my_string یا my_bool داریم
پس وقتی داریم این دو مقدار رو میخونیم فقط ممکنه یکی از اون‌ها مقداری روش ست شده باشه. و اما چند نکته:

فیلدهای oneof نمیتونند repated باشن.

توسعه oneof میتونه خیلی پیچیده باشه.

در موقع خواندن مسیج oneof، همه فیلدها نال خواهد بود، بجز آخرین فیلدی که موقع ارسال درخواست ست کردید.
پس اگر my_string و my_bool ست کنید فقط my_bool داری مقدار خواهد بود و my_string نال خواهد بود.

🔰 @gopher_academy
🤔ایا تابحال میدونستید که👇🤔
😐حداکثر حجم اپلود در یوتوب چقدره 👇
🔺Maximum file size:
128GB

🔺Maximum video length:
12 hours

🔺Accepted YouTube video formats:
.mov, .mpeg, .mp4, .avi, .wmv, .mpegps, .flv, webM, and 3GPP

🎯 @gopher_academy
Gopher Academy
🔴آموزش proto3 از صفر تا صد🔴 proto? 🔴https://t.me/gopher_academy/627 Defining A Message Type 🔴 https://t.me/gopher_academy/628 Assigning Field Numbers 🔴https://t.me/gopher_academy/629 Adding Comments 🔴 https://t.me/gopher_academy/630 Reserved Fields…
🔴Maps🔴

در این تایپ می‌تونید اطلاعات رو به صورت key/value تعریف کنید (مشابه جیسون). از تمامی تایپ‌ها غیر از float/double پشتیابی میکنه، برای مثال:
در مثال بالا ما مجموعه‌ای از یوزرها به همراه پروفایلشون داریم، که کلید هر پروفایل یوزرآیدی و مقدارش مسیج دیگه‌ای به عنوان پروفایله. و اما چند نکته:
فیلدهای map نمیتونند repated باشن.
هیچگونه مرتب سازی روی مپ اتفاق نمیفته، چون مپ key/value هستش.

🔰 @gopher_academy
Gopher Academy
🔴آموزش proto3 از صفر تا صد🔴 proto? 🔴https://t.me/gopher_academy/627 Defining A Message Type 🔴 https://t.me/gopher_academy/628 Assigning Field Numbers 🔴https://t.me/gopher_academy/629 Adding Comments 🔴 https://t.me/gopher_academy/630 Reserved Fields…
🔴Packages🔴
خیلی مهمه برای فایل‌های پروتو پیکج تعریف کنید، وقتی کد برای زبان خودتون جنریت کنید این پکیج‌ها کاربرد دارن، همچنین از کانفلیکت بین اسم مسیج‌ها جلوگیری میکنه، پیکج‌ها تو تمام زبان‌های پشتیبانی میشن.

🔰 @gopher_academy
Gopher Academy
🔴آموزش proto3 از صفر تا صد🔴 proto? 🔴https://t.me/gopher_academy/627 Defining A Message Type 🔴 https://t.me/gopher_academy/628 Assigning Field Numbers 🔴https://t.me/gopher_academy/629 Adding Comments 🔴 https://t.me/gopher_academy/630 Reserved Fields…
🔴Defining Services🔴
خب میخوایم درمورد ویژگی اصلی پروتوبافر حرف بزنیم، در فایل پروتو بجز مسیج‌ها میتونید سرویس‌ها روهم تعریف کنید، سرویس، اندپوینتی هست که کاربر (یا بقیه سرویس‌ها) میتونه بهش دسترسی داشته باشه، برای مثال:
در این فایل یک سرویس سرچ تعریف کردیم و گفتیم انتظار داریم یک مسیج سرویس ریکوئست دریافت کنیم و در جواب یک مسیج سرچ ریسپانس برمیگردونیم، سادس درسته؟ در اصل این شیوه ساخت یک API در فایل پروتو هست، در اینجا به یک فریمورک نیاز داریم تا این سرویس رو هندل کنه و کدهاشو جنریت کنه، در پروتو ورژن ۳ از فریمورک gRPC گوگل کمک میگیره، ولی شما میتونید روی اینترنت فریمورک‌های دیگم پیدا کنید.



🔰 @gopher_academy
Gopher Academy
🔴Defining Services🔴 خب میخوایم درمورد ویژگی اصلی پروتوبافر حرف بزنیم، در فایل پروتو بجز مسیج‌ها میتونید سرویس‌ها روهم تعریف کنید، سرویس، اندپوینتی هست که کاربر (یا بقیه سرویس‌ها) میتونه بهش دسترسی داشته باشه، برای مثال: در این فایل یک سرویس سرچ تعریف کردیم…
فرض کنید شما یک سرور جاوا دارید که یک سرویسی رو ارائه میده، حالا هر کلاینتی با هر زبانی، برای مثال گولنگ، پایتون، جاوا و... میتونه با کمک فایلهای پروتو کدهای کلاینت gRPC جنریت کنه، و کلاینت یک ریکوئست پروتوبافر تولید میکنه برای سرور میفرسته، و سرور در پاسخ یک ریسپانس پروتوبافر ارسال میکنه. پس پروتوبافر اینجا یک شیوه انتقال دیتا توی شبکه‌اس که تمام زبان‌هارو ساپورت میکنه که همین نقطه قوتش شده.

🔰 @gopher_academy
🎯 آموزش کار با Gin Web Framework 🎯
🔸 part 1
🔴 https://vrgl.ir/iPhoQ

🔸 part 2
🔴 https://vrgl.ir/eZW4m

🔸 part 3
🔴 https://vrgl.ir/wXpwI

🔸part 4
🔴 https://vrgl.ir/rcsZs

🔸part 5
🔴 https://vrgl.ir/H72zq

🔸 part 6
🔴 https://vrgl.ir/RWMSW

🔸part 7
🔴 https://vrgl.ir/x0UTP

🔸 part 8
🔴 https://vrgl.ir/pTeDF

🔸part 9
🔴 https://t.me/gopher_academy/430
.
#gin

🔰 @gopher_academy
This media is not supported in your browser
VIEW IN TELEGRAM
🎯موقعیت شغلی 🎯
#job

🔰 @gopher_academy
🔸استخدام Golang Developer در تجارت بین الملل رابین #تهران

🔹نوع همکاری: تمام‌وقت
🔹سطح: ارشد (Senior)
🔹زمینه کاری شرکت: پرداخت حوزه بین الملل و توریست
🔹حقوق بیش از ۱۲ میلیون تومان
مزایا: 🔹پروژه های تکنولوژی محور 🔹صبحانه و ناهار 🔹محیطی پویا و دوستانه 🔹امکان رشد 🔹حقوق و مزایای خوب

ارسال درخواست از طریق:👇
🔗 https://quera.ir/r/5Ka1bA

🔰 @gopher_academy
🎯OOM Killer: The Linux Assassin🎯

خب چند وقت پیش یه مقاله‌ای توسط آقای JOE CONWAY در بحث PostgreSQL Performance Tuning پابلیش شد که بررسیش خالی از لطف نیست.
این مقاله روی فیچری از کرنل لینوکس به نام OOM (Out-Of-Memory) Killer مخصوصا تو مبحث Kubernetes و تاثیراتش روی سرویس PostgreSQL هنگام دپلویش روی این پلتفرم تمرکز و بحث می‌کنه.
در درجه اول خوده این فیچر رو مورد بررسی قرار می گیره و سطوحی که این فیچر می‌تونه تاثیر بزاره روی سرویسهای مختلف و قضیه اینجوریه که PostgreSQL نباید توسط OOM Killer کیل بشه چرا که مشکلاتی به همراه داره (تو مقاله کامل بررسی شده) ...
در نهایت هم روی مبحث Kubernetes QoS صحبت می‌کنه و تاثیراتی که هر کدوم از این سطوح QoS می‌تونن روی OOM Killer و عملا PostgreSQL بزارن ...

Links:

https://info.crunchydata.com/blog/deep-postgresql-thoughts-the-linux-assassin

◾️https://www.postgresql.org/docs/current/kernel-resources.html#LINUX-MEMORY-OVERCOMMIT


🔰 @gopher_academy