Gopher Academy
3.33K subscribers
917 photos
40 videos
279 files
1.97K links
🕸 Gopher Academy

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

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

ادمین:
@mrbardia72
Download Telegram
🔵 عنوان مقاله
The Hookdeck Event Gateway

🟢 خلاصه مقاله:
مقاله به بررسی یک صف بدون سرور می‌پردازد که برای ارسال، دریافت، تغییر دادن، فیلتر کردن و هدایت رویدادها در معماری مبتنی بر رویداد طراحی شده است. این سیستم امکان مدیریت انعطاف‌پذیر و مقیاس‌پذیر رویدادها را فراهم می‌آورد و به کاربران اجازه می‌دهد تا بدون نیاز به نگرانی درباره زیرساخت‌های سرور یا مدیریت آنها، روی منطق و جریان کاری تمرکز کنند. این فناوری برای محیط‌هایی که نیاز به پردازش حجم بالایی از رویدادها به صورت خودکار و در زمان واقعی دارند، بسیار مناسب است. در نهایت، استفاده از صف‌های بدون سرور می‌تواند به بهبود کارایی و کاهش هزینه‌های عملیاتی منجر شود، چرا که کاهش پیچیدگی مدیریتی و نیازهای سخت‌افزاری را به دنبال دارد.

🟣لینک مقاله:
https://hookdeck.com?ref=goweekly-506


👑 @gopher_academy
👍1
🔵 عنوان مقاله
Logdy: A Web-Based Viewer for Logs

🟢 خلاصه مقاله:
مقاله‌ای که به بحث گذاشته شده، درباره ابزاری وب‌بنیان برای مشاهده لاگ‌ها در زمان واقعی است. این ابزار امکان استریم محتوا به یک رابط کاربری وب را با فیلترهایی که به‌طور خودکار تولید می‌شوند، فراهم می‌آورد. همچنین، این سیستم قابلیت تجزیه و تحلیل هر نوع فرمتی با استفاده از زبان برنامه‌نویسی TypeScript را دارد. در بخش دیگری از مقاله، به یک نمونه زنده اشاره شده که نشان‌دهنده قابلیت‌ها و کارایی این ابزار در شرایط واقعی است. این مقاله به ویژه برای توسعه‌دهندگان وب و مدیران سیستم‌های اطلاعاتی که به دنبال راهکارهایی برای مدیریت و تحلیل لاگ‌ها در زمان واقعی هستند، مفید است.

🟣لینک مقاله:
https://logdy.dev/


👑 @gopher_academy
2🔥1
Forwarded from Bardia & Erfan
Elon Musk


🕸 @labdon_academy
👍6
🔵گاهی اوقات توی go.mod شما یه سری کتابخونه نصب میکنید و جلوش ورژن رو میزنه 🤔اما بعضی ورژن به صورت زیر
v3.16.13-20221017192402-261537637ce8

اینجا توضیح دادیم که هر کدومش یعنی چی👇👇👇👇


این نوع نسخه زمانی استفاده می‌شود که یک تگ نسخه معتبر (مثل v1.2.3) وجود نداشته باشد و به جای آن از یک commit خاص در تاریخ معین استفاده شود.
این نسخه به شکل زیر ساختاردهی شده است:

v3.16.13-20221017192402-261537637ce8

### تحلیل اجزای نسخه:

1. v3.16.13:
   - این بخش نشان می‌دهد که نسخه پایه‌ای که بر اساس آن این pseudo-version ساخته شده، v3.16.13 است. این نشان می‌دهد که این commit بعد از این نسخه ساخته شده است.

2. 20221017192402:
   - این بخش نشان‌دهنده تاریخ و زمان commit است که به فرمت YYYYMMDDHHMMSS بیان می‌شود:
     - 2022: سال
     - 10: ماه
     - 17: روز
     - 19: ساعت (بر اساس 24 ساعت)
     - 24: دقیقه
     - 02: ثانیه
   - این به این معناست که commit مربوطه در تاریخ 17 اکتبر 2022 در ساعت 19:24:02 انجام شده است.

3. 261537637ce8:
   - این بخش کوتاهی از هش commit است که این pseudo-version به آن اشاره می‌کند. هش کامل commit در سیستم‌های مدیریت نسخه مثل Git معمولاً طولانی‌تر است، اما در اینجا تنها چند کاراکتر اول آن استفاده شده است.

### مفهوم کلی:
این نسخه (pseudo-version) نشان می‌دهد که یک commit خاص (با هش 261537637ce8) که پس از نسخه v3.16.13 ایجاد شده و در تاریخ 17 اکتبر 2022 ثبت شده، به عنوان نسخه استفاده می‌شود. این نوع نسخه معمولاً زمانی به کار می‌رود که توسعه‌دهنده بخواهد از یک commit مشخص استفاده کند، اما آن commit هنوز به عنوان یک نسخه رسمی تگ نشده است.


👑 @gopher_academy
👍11
🔵 عنوان مقاله
🗣️ Do Gophers Really Tend to Build Everything From Scratch?

🟢 خلاصه مقاله:
در یک بحث در ردیت، توسعه‌دهنده‌ای که به تازگی با زبان برنامه‌نویسی Go آشنا شده بود، سوال کرد که چرا در Go تعداد فریمورک‌های بزرگ کم است و آیا معمولاً همه چیز را از ابتدا می‌سازیم. پاسخ برتر به خوبی رویکرد معمول به زبان Go را خلاصه می‌کند: ما تعداد زیادی کتابخانه عالی داریم و Go این امکان را فراهم می‌کند که آن‌ها را به راحتی با هم ترکیب کنیم. این تبادل نظر به بحث بیشتری در مورد چگونگی بهره‌گیری و ترکیب کتابخانه‌ها در Go برای توسعه نرم‌افزار به جای تکیه بر فریمورک‌های بزرگ و جامع منجر شد، که این موضوع نشان‌دهنده تمایل توسعه‌دهندگان Go به استفاده از رویکردهای ساده‌تر و مدولارتر است.

🟣لینک مقاله:
https://www.reddit.com/r/golang/comments/1cmk0bp/from_python_to_go_do_you_really_tend_to_build/l3170pi/


👑 @gopher_academy
👍5
خط زیر در فایل go.work.sum یه نمونه هست از یک کتابخونه که مربوط به مدیریت ماژول‌ها و وابستگی‌های پروژه Go است:

modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ=


این خط شامل اطلاعات زیر است:

1. modernc.org/ccgo/v3:
   - این بخش نام ماژول است. در اینجا، ماژول ccgo از مسیر modernc.org/ccgo/v3 وارد شده است.

2. v3.16.6/go.mod:
   - این قسمت نسخه‌ای از ماژول را که به آن ارجاع داده شده است، مشخص می‌کند. در اینجا، نسخه v3.16.6 مورد استفاده قرار گرفته است. همچنین، این مشخص می‌کند که این خط به فایل go.mod این نسخه اشاره دارد.

3. h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ=:
   - این قسمت یک هش رمزنگاری است (هشینگ شده با الگوریتم SHA-256) که برای تأیید صحت و یکپارچگی فایل go.mod برای این ماژول استفاده می‌شود. این هش تضمین می‌کند که فایل go.mod مربوط به این ماژول و نسخه‌ی خاص آن بدون تغییر است و همان نسخه‌ای است که در ابتدا دانلود و استفاده شده است.

### مفهوم کلی:
این خط به Go می‌گوید که ماژول ccgo نسخه v3.16.6 از مسیر modernc.org/ccgo/v3 استفاده شده و صحت فایل go.mod آن با هش مشخص شده تایید می‌شود. این اطلاعات در فایل go.work.sum ذخیره می‌شود تا اطمینان حاصل شود که تمامی وابستگی‌ها در پروژه به درستی مدیریت می‌شوند و هیچگونه تغییر ناخواسته‌ای در فایل‌های ماژول‌ها ایجاد نشده است.

👑 @gopher_academy
1👍1🍾1
🔵 عنوان مقاله
Tips for Building Bubble Tea Programs

🟢 خلاصه مقاله:
مقاله‌ای که به بررسی و ارزیابی Bubble Tea، یک فریم‌ورک قوی به زبان Go برای ساخت رابط‌های کاربری ترمینال (TUIs) می‌پردازد، تجارب لوییس را در ساخت PUG، یک TUI برای Terraform، به اشتراک می‌گذارد. لوییس وقت زیادی را برای توسعه PUG صرف کرده است و در این مقاله، نکات کلیدی و درس‌هایی که از این تجربه آموخته شده، بیان می‌شود. این مقاله علاوه بر معرفی کاربردها و ویژگی‌های Bubble Tea، بر روی چگونگی استفاده از این فریم‌ورک به منظور بهینه‌سازی و افزایش کارآمدی رابط‌های کاربری ترمینال تمرکز دارد.

🟣لینک مقاله:
https://golangweekly.com/link/159225/web


👑 @gopher_academy
👍4🔥1
📢اگر دنبال نکات طلایی و مطالب بروز مربوط به انواع دیتابیس ها هستی

ما توی چنل زیر بیشتر دیتابیس های زیر رو مورد بررسی قرار میدیم👇

🔵Postgresql
🔵Redis
🔵Mysql
🔵Mongodb

🔴 سعی میشه توی چنل زیر بروز ترین مطالبی دیتابیس های فوق رو بزاریم


👇👇چنل ما👇👇

@database_academy
🍾2
در گولنگ ما دوتا از تکنیک استفاده می کنیم که به آن type assertion یا interface satisfaction checking گفته می‌شود. بیایید تفاوت‌ها را بررسی کنیم:

### 1. var _ io.ReadWriter = (*T)(nil)

این عبارت برای اطمینان از این استفاده می‌شود که نوع T از اینترفیس io.ReadWriter پیروی می‌کند. این یک تکنیک برای تایید کامپایل‌تایم است.

- هدف: بررسی می‌کند که نوع T تمام متدهای مورد نیاز برای اینترفیس io.ReadWriter را پیاده‌سازی کرده است.
- نحوه‌ی عملکرد: با اختصاص یک مقدار nil به یک اشاره‌گر از نوع T و سپس بررسی اینکه آیا می‌تواند به عنوان یک io.ReadWriter مورد استفاده قرار بگیرد، اگر نوع T همه متدهای مورد نیاز را نداشته باشد، کامپایلر ارور خواهد داد.
- استفاده در توسعه: این تکنیک به طور رایج برای ایمن‌سازی کد و جلوگیری از مشکلات پیاده‌سازی اینترفیس‌ها در زمان کامپایل استفاده می‌شود.

مثال:
type T struct{}

func (t *T) Read(p []byte) (n int, err error) {
return 0, nil
}

func (t *T) Write(p []byte) (n int, err error) {
return len(p), nil
}

// تایید می‌کند که T از io.ReadWriter پیروی می‌کند.
var _ io.ReadWriter = (*T)(nil)


در اینجا، اگر T متدهای Read و Write را نداشته باشد، کامپایلر خطا می‌دهد.

### 2. var PaymentInstance PaymentProcessor = nil

این عبارت برای تعریف یک متغیر از نوع PaymentProcessor و مقداردهی اولیه آن به nil است. در اینجا PaymentProcessor یک اینترفیس فرضی است و شما متغیری به نام PaymentInstance را به عنوان نوع اینترفیس تعریف می‌کنید و فعلاً مقدار آن nil است.

- هدف: تعریف یک متغیر از نوع اینترفیس PaymentProcessor که فعلاً به هیچ مقداری یا پیاده‌سازی‌ای اختصاص داده نشده است.
- نحوه‌ی عملکرد: این متغیر می‌تواند در آینده به یک مقداری که نوع آن پیاده‌سازی‌کننده‌ی اینترفیس PaymentProcessor است، مقداردهی شود.
- استفاده در توسعه: این مورد بیشتر برای مقداردهی اولیه و آماده‌سازی یک متغیر برای استفاده‌های بعدی است.

مثال:
type PaymentProcessor interface {
ProcessPayment(amount float64) error
}

var PaymentInstance PaymentProcessor = nil

// بعداً می‌توانیم به PaymentInstance یک پیاده‌سازی خاص بدهیم:
type PayPalProcessor struct{}

func (p *PayPalProcessor) ProcessPayment(amount float64) error {
// پردازش پرداخت
return nil
}

PaymentInstance = &PayPalProcessor{}


### تفاوت‌ها

- عبارت اول (`var _ io.ReadWriter = (*T)(nil)`): یک چک کردن کامپایل‌تایم است تا مطمئن شویم نوع T اینترفیس io.ReadWriter را پیاده‌سازی کرده است.

- عبارت دوم (`var PaymentInstance PaymentProcessor = nil`): یک متغیر از نوع اینترفیس PaymentProcessor تعریف می‌کند و مقدار اولیه آن را nil قرار می‌دهد که برای استفاده‌های بعدی آماده است.

عبارت اول بیشتر برای بررسی صحیح بودن پیاده‌سازی اینترفیس‌ها در زمان کامپایل استفاده می‌شود، در حالی که عبارت دوم برای مقداردهی اولیه متغیرها در زمان اجرا و مدیریت پیاده‌سازی‌های مختلف اینترفیس‌ها استفاده می‌شود.

👑 @gopher_academy
👍9
هنگامی که دارید کد هاتون رو کامیت می کنید هیچ وقت کد های کامنت شده رو کامیت نکنید این باعث کثیف شدن پایگاه کد هاتون می شود و همچنین این باعث میشه از اصل کنترل ورژن دورتر شوید.

کثیف شدن پایگاه کد
وقتی که کدهای کامنتشده را در مخزن (Repository) خود کامیت میکنید، این کدها به عنوان بخشی از تاریخچهی پروژه شما ذخیره میشوند. این موضوع باعث میشود که پایگاه کد شما پر از کدهای مرده، غیرقابل استفاده و غیرقابل پیگیری شود. به مرور زمان، این کدها میتوانند باعث افزایش پیچیدگی پروژه شوند و درک کدها را برای توسعهدهندگان جدید و حتی خودتان در آینده دشوار کنند.

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

پایبندی به فلسفه کد تمیز:
کد تمیز (Clean Code) به معنای کدی است که خوانا، قابل فهم و بدون شلوغیهای اضافی باشد. وجود کدهای کامنتشده در مخزن شما برخلاف این فلسفه است، زیرا این کدها میتوانند باعث ایجاد ابهام و سردرگمی شوند. مثلاً ممکن است یک توسعهدهنده دیگر از خودش بپرسد که آیا این کد کامنتشده باید به کد اصلی اضافه شود یا نه. این موضوع میتواند باعث کاهش بهرهوری و ایجاد خطاهای غیرمنتظره در آینده شود.


راه حلهای جایگزین:
اگر نیاز دارید که کدی را برای مدت کوتاهی از اجرا خارج کنید ولی همچنان میخواهید آن را به یاد داشته باشید، میتوانید از امکانات کنترل ورژن استفاده کنید. به عنوان مثال، میتوانید آن کد را به یک شاخه (branch) جداگانه منتقل کنید. در این صورت، هم تاریخچهی پروژه تمیز باقی میماند و هم شما به راحتی میتوانید در صورت نیاز به آن کد دسترسی داشته باشید.

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

DevTwitter | <Mohammad Abdorrahmani/>

👑 @gopher_academy
👍6
🔵 عنوان مقاله
Stytch: Auth0 Alternative for AuthN, AuthZ, Fraud Prevention

🟢 خلاصه مقاله:
مقاله به بررسی امکانات و خدمات Stytch در زمینه احراز هویت B2B چند-مستاجری در سطح شرکت‌ها می‌پردازد. Stytch امکان استفاده از SSO (ورود یکباره)، RBAC (کنترل دسترسی براساس نقش) و SCIM (مدیریت هویت و دسترسی مبتنی بر استانداردهای ابری) را فراهم می‌کند. همچنین، این سرویس قابلیت استفاده از رابط‌های کاربری از پیش ساخته شده، بدون رابط کاربری (headless)، و یا ادغام مستقیم با API را ارائه می‌دهد. یکی از ویژگی‌های مهم Stytch شناسایی دیجیتالی دستگاه‌هاست تا از طریق آن بتوان ردیابی بات‌ها را انجام داد و از سوءاستفاده جلوگیری کرد. استفاده از Stytch با نسخه رایگان نیز آغاز می‌شود، که این امکان به کاربران اجازه می‌دهد تا کارایی و اثربخشی این سرویس را قبل از خرید تجربه کنند.

🟣لینک مقاله:
https://stytch.com?utm_source=go-weekly&utm_medium=paid_sponsorship&utm_content=go-weekly-05-14-2024&utm_campaign=go-weekly-05-14-2024


👑 @gopher_academy
🔥1
🔵 عنوان مقاله
Reclaiming CPU for Free with PGO

🟢 خلاصه مقاله:
مقاله‌ای که به بررسی تجربیات شرکت‌های Dolt و Cloudflare با استفاده از بهینه‌سازی مبتنی بر نمایه (PGO) در نسخه 1.20 و بالاتر زبان برنامه‌نویسی Go پرداخته، نشان می‌دهد که Cloudflare به طور خاص سود بزرگی از این فناوری برده است. با توجه به مقیاس بزرگ استفاده از خدمات مبتنی بر Go در Cloudflare، که شامل هزاران هسته می‌شود، نتایج حاصله از این بهینه‌سازی بسیار چشمگیر است. این بهینه‌سازی که در نسخه‌های جدیدتر Go اعمال شده، به طور موثری عملکرد برنامه‌ها را بهبود می‌بخشد، و Cloudflare توانسته از این روش برای افزایش کارایی و بهره‌وری در مقیاس وسیع بهره‌مند شود. در نتیجه، مقاله بر اهمیت انتخاب این فناوری‌های نوین در توسعه و استقرار سیستم‌های نرم‌افزاری در سطوح بالای عملیاتی تاکید می‌کند.

🟣لینک مقاله:
https://blog.cloudflare.com/reclaiming-cpu-for-free-with-pgo/


👑 @gopher_academy
👍1🔥1
در زبان برنامه‌نویسی Go، دو مفهوم Expressions (عبارات) و Statements (دستورات) نقش مهمی در ساختار کد دارند. هر کدام کاربرد و رفتار خاص خود را دارند. در ادامه این دو مفهوم و انواع آن‌ها را با مثال توضیح می‌دهیم.

### 1. Expressions (عبارات)

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

انواع رایج عبارات:

#### - Literal Expressions (عبارات صریح)
این‌ها مقادیر ثابت و از پیش تعریف شده هستند، مثل اعداد، رشته‌ها و بولین‌ها.

مثال:
42        // عدد صحیح
3.14 // عدد اعشاری
"hello" // رشته
true // مقدار بولی


#### - Arithmetic Expressions (عبارات ریاضی)
این نوع عبارات شامل عملیات‌های ریاضی مثل جمع، تفریق، ضرب و تقسیم می‌شود.

مثال:
3 + 5          // نتیجه: 8
10 - 2 // نتیجه: 8
7 * 2 // نتیجه: 14
9 / 3 // نتیجه: 3


#### - Comparison Expressions (عبارات مقایسه‌ای)
این عبارات برای مقایسه مقادیر استفاده می‌شوند و نتیجه آن‌ها همیشه یک مقدار بولی (true یا false) است.

مثال:
5 > 3          // نتیجه: true
10 == 10 // نتیجه: true
7 != 2 // نتیجه: true


#### - Logical Expressions (عبارات منطقی)
این نوع عبارات شامل عملیات‌های منطقی مثل AND، OR و NOT است.

مثال:
true && false  // نتیجه: false
true || false // نتیجه: true
!true // نتیجه: false


#### - Function Call Expressions (عبارات فراخوانی تابع)
فراخوانی توابع یک نوع عبارت است که خروجی آن بر اساس اجرای تابع تعیین می‌شود.

مثال:
fmt.Println("Hello")  // فراخوانی تابع که مقداری از نوع int برمی‌گرداند (تعداد بایت‌های چاپ شده)
len("Go") // فراخوانی تابع که طول رشته را برمی‌گرداند


#### - Type Conversion Expressions (عبارات تبدیل نوع)
برای تغییر نوع داده‌ها از یک نوع به نوع دیگر استفاده می‌شوند.

مثال:
float64(5)   // تبدیل عدد صحیح 5 به نوع float64
int(3.14) // تبدیل عدد اعشاری 3.14 به نوع int (خروجی: 3)


### 2. Statements (دستورات)

Statements یا دستورات قطعه‌های کدی هستند که عملی را انجام می‌دهند، اما ممکن است مقداری برنگردانند. آن‌ها معمولاً از عبارات تشکیل می‌شوند و کد را در مسیر منطقی جلو می‌برند.

انواع رایج دستورات:

#### - Declaration Statements (دستورات اعلان)
این دستورات برای تعریف متغیرها، توابع، یا ساختارها استفاده می‌شوند.

مثال:
var x int       // اعلان متغیر x از نوع int
y := 42 // اعلان و مقداردهی اولیه متغیر y


#### - Assignment Statements (دستورات انتساب)
این نوع دستورات برای اختصاص یک مقدار به یک متغیر استفاده می‌شود.

مثال:
x = 10          // مقدار 10 به متغیر x اختصاص داده شده
z := x + 5 // مقدار عبارت x + 5 به z اختصاص داده شده


#### - Control Flow Statements (دستورات کنترل جریان)
این دستورات مسیر اجرای کد را بر اساس شرایط یا تکرار تغییر می‌دهند.

- if Statement (دستور شرطی):
if x > 10 {
fmt.Println("x بزرگتر از 10 است")
} else {
fmt.Println("x کوچکتر یا مساوی 10 است")
}


- for Statement (حلقه تکرار):
for i := 0; i < 5; i++ {
fmt.Println(i)
}


- switch Statement (دستور انتخاب):
switch x {
case 1:
fmt.Println("x برابر 1 است")
case 2:
fmt.Println("x برابر 2 است")
default:
fmt.Println("x عددی دیگر است")
}


#### - Function Call Statements (دستورات فراخوانی تابع)
این نوع دستورات برای اجرای توابع استفاده می‌شوند.

مثال:
fmt.Println("Hello, World!")  // فراخوانی تابع که در اینجا فقط عمل چاپ را انجام می‌دهد


#### - Return Statement (دستور بازگشت)
در توابع برای بازگرداندن مقدار به کار می‌رود.

مثال:
func add(a int, b int) int {
return a + b // بازگرداندن حاصل جمع a و b
}


#### - Block Statements (بلوک‌های کد)
یک بلوک کد که ممکن است شامل چندین دستور باشد. بلوک‌ها با {} تعریف می‌شوند.

مثال:
{
x := 10
fmt.Println(x)
}


### جمع‌بندی

- Expressions (عبارات): بخش‌هایی از کد که مقداری تولید می‌کنند (مثل محاسبات ریاضی، مقایسه‌ها، یا فراخوانی توابع).
- Statements (دستورات): عملی انجام می‌دهند اما ممکن است مقداری بازنگردانند (مثل اعلان متغیر، شرط‌ها، حلقه‌ها یا فراخوانی تابع).

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

👑 @gopher_academy
🍾52👍1🔥1
🔵 عنوان مقاله
anthropic-claude-golang-sdk: Go Library for Anthropic's Claude API

🟢 خلاصه مقاله:
مقاله مورد نظر به بررسی و توضیح چگونگی ارسال پیام‌های ساختاریافته و مدیریت پاسخ‌ها از مدل‌های هوش مصنوعی مکالمه‌ای Anthropic در برنامه‌های نوشته شده با زبان برنامه‌نویسی Go می‌پردازد. نویسنده، روش‌هایی را بیان می‌کند که توسط توسعه‌دهندگان می‌توانند به کار گرفته شوند تا اینترفیس‌های کاربردی مبتنی بر گفتگو را با استفاده از مدل‌های Anthropic ایجاد کنند. این شامل توضیحاتی درباره‌ی نحوه‌ی ارتباط بین Go و AI Anthropic، استفاده از API‌ها، و راه‌های برخورد با داده‌های ورودی و خروجی است. هدف از آموزه‌ها در این مقاله، فراهم کردن ابزارها و دانش لازم برای ایجاد برنامه‌های پاسخگو و هوشمند است که می‌تواند در بازارها و برنامه‌های کاربردی مختلف مورد استفاده قرار گیرد. از دیدگاه فنی، مقاله نکات عملی و چالش‌های برنامه‌نویسی مربوط به انتقال و دریافت داده بین سیستم‌های Anthropic و برنامه‌های Go را مورد بررسی قرار می‌دهد.

🟣لینک مقاله:
https://golangweekly.com/link/160499/web


👑 @gopher_academy
🤔🤔توی لاین 55 از فایل response.go این توضیح برام جالب بود
🔵 https://go.dev/src/net/http/response.go

// The response body is streamed on demand as the Body field
// is read.

🟢معنای این جمله چیه؟
این جمله به نحوه‌ی مدیریت و پردازش بدنه‌ی پاسخ (Response Body) در درخواست‌های HTTP در Go اشاره دارد. به طور خاص، توضیح می‌دهد که **بدنه‌ی پاسخ به صورت (streamed) و بر اساس نیاز (on demand) خوانده می‌شود، یعنی فقط زمانی که به آن دسترسی پیدا می‌کنید، داده‌ها از بدنه‌ی پاسخ خوانده می‌شوند.

🔴توضیح دقیق‌تر:
در Go، زمانی که یک درخواست HTTP ارسال می‌کنید، بسته به کتابخانه‌ای که استفاده می‌کنید (مانند net/http)، پاسخ دریافتی شامل یک فیلد به نام Body است. این فیلد از نوع io.ReadCloser است که امکان خواندن داده‌ها را به صورت جریان (stream) فراهم می‌کند.

❇️چرا از Streaming استفاده می‌شود؟

🔻صرفه‌جویی در حافظه:

اگر پاسخ HTTP شامل داده‌های بزرگی باشد (مثلاً فایل‌های بزرگ، ویدیوها، یا جریان‌های داده‌ای)، بارگذاری تمام داده‌ها در حافظه به صورت همزمان می‌تواند باعث افزایش مصرف حافظه و کاهش کارایی برنامه شود.
با استفاده از streaming، فقط بخش‌های مورد نیاز داده‌ها به حافظه منتقل می‌شوند، که این امر باعث بهینه‌سازی مصرف منابع می‌شود.

🔻پردازش همزمان:

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



👑 @gopher_academy
👍4🔥2
🔵 عنوان مقاله
Prep: Compile-Time Function Evaluation for Go

🟢 خلاصه مقاله:
مقاله‌ای که بررسی شده به موضوع استفاده از "prep.Comptime" می‌پردازد، که این امکان را فراهم می‌کند تا توابع در زمان ساخت ارزیابی شده و به نتایج محاسبه شده آنها تبدیل شوند. این کار مشابه ویژگی "comptime" در زبان برنامه‌نویسی Zig است، با این تفاوت که به گفته مقاله، کاملاً متفاوت است. نویسنده این ایده را "جسارت آمیز" توصیف می‌کند اما نمی‌توان انکار کرد که ایده‌ای جالب است. با این حال، محدودیت‌هایی وجود دارد و "toolexec" به منظور پشتیبانی از بازنویسی متن منبع به صورت دلخواه طراحی نشده است. این موضوع نشان‌دهنده این است که گرچه فناوری‌های نوین می‌توانند راه‌های جدیدی برای بهینه‌سازی و افزایش کارایی فراهم آورند، اما هنوز محدودیت‌ها و چالش‌هایی را به همراه دارند که نیاز به بررسی و توسعه بیشتر دارند.

🟣لینک مقاله:
https://golangweekly.com/link/160477/web


👑 @gopher_academy
اChannels در زبان Go در دسته‌بندی‌های خاص خود قرار می‌گیرند و بیشتر به عنوان نوع داده و ابزاری برای همگام‌سازی در عبارات و دستورات کنترل جریان استفاده می‌شوند.

### Channels به عنوان Expressions:
اChannels می‌توانند به عنوان عبارات استفاده شوند، چرا که مقادیر را انتقال می‌دهند و می‌توانند در جاهایی که مقداری بازگشتی نیاز است، استفاده شوند. به عنوان مثال:

#### - ارسال و دریافت از Channel (Send and Receive):
ارسال و دریافت از یک channel یک عملیات مسدودکننده است و می‌تواند به عنوان یک عبارت استفاده شود.

مثال:
ch := make(chan int)
go func() {
ch <- 42 // ارسال مقدار به channel (Send)
}()
val := <-ch // دریافت مقدار از channel (Receive)
fmt.Println(val)

در اینجا، ch <- 42 و <-ch هر دو عبارات هستند؛ یکی برای ارسال مقدار به channel و دیگری برای دریافت مقدار از آن.

### Channels به عنوان Statements:
عملیات مرتبط با channels می‌توانند به عنوان دستورات نیز استفاده شوند. در برخی موارد از آن‌ها برای کنترل جریان برنامه استفاده می‌شود، مثل استفاده در دستورات حلقه یا شرطی.

#### - Select Statement:
یک کانال می‌تواند در select statement که نوعی از دستورات کنترل جریان است، استفاده شود. select شبیه به
switch عمل می‌کند اما برای عملیات همگام‌سازی کانال‌ها.

مثال:

select {
case val := <-ch1:
fmt.Println("Received", val)
case ch2 <- 42:
fmt.Println("Sent 42 to ch2")
default:
fmt.Println("No communication")
}


در اینجا، select یک دستور است که جریان اجرای کد را بر اساس وضعیت کانال‌ها تعیین می‌کند.

### نتیجه‌گیری:

- ا**Channels** می‌توانند به عنوان عبارت در زمان ارسال (ch <- val) یا دریافت (val := <-ch) از کانال‌ها استفاده
شوند.

- در شرایط خاص مانند استفاده از `select` statement**، کانال‌ها بخشی از **دستورات کنترل جریان می‌شوند.


بنابراین، بسته به نحوه استفاده، کانال‌ها می‌توانند هم به عنوان عبارت و هم به عنوان دستور عمل کنند.

👑 @gopher_academy
👍31🍾1
🔵 عنوان مقاله
Predictive CPU Isolation of Containers at Netflix

🟢 خلاصه مقاله:
نتفلیکس به چالش‌های مدیریت منابع پردازشگر مرکزی (CPU) در مقیاس بالا می‌پردازد. این مقاله توضیح می‌دهد که چگونه نتفلیکس از مدل‌های پیش‌بینی استفاده می‌کند تا منابع CPU را به طور کارآمدتر برای کانتینرهای خود اختصاص دهد. هدف این است که از مصرف بی‌رویه منابع جلوگیری شود و در عین حال عملکرد برنامه‌های کاربردی تضمین گردد.

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

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

🟣لینک مقاله:
https://netflixtechblog.com/predictive-cpu-isolation-of-containers-at-netflix-91f014d856c7


👑 @gopher_academy
6👍1🍾1
Forwarded from Bardia & Erfan
یک پیشنهاد جذاب کاری
براتون رزومه هم میشه تازه :))

🕸 @labdon_academy
🤣30🍾8🔥7
Forwarded from Bardia & Erfan
🔵اثر دانینگ کروگر (Dunning-Kruger Effect) چیست؟


🟢 «افرادی که دانش کمتر از میانگین دارند، با دو مشکل به‌صورت هم‌زمان مواجه هستند: نه تنها نتیجه‌گیری‌های اشتباهی دارند و بر اساس همان نتیجه‌گیری‌ها خطاهای مکرری را مرتکب می‌شوند، بلکه به دلیل همین مشکل، عدم توانایی خود را نیز درک نمی‌کنند و متوجه این عدم توانایی نخواهند شد.»

🔴 https://karboom.io/mag/articles/%D8%A7%D8%AB%D8%B1-%D8%AF%D8%A7%D9%86%DB%8C%D9%86%DA%AF-%DA%A9%D8%B1%D9%88%DA%AF%D8%B1


🕸 @labdon_academy
👍6🔥2🍾2