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
در Go، دلیل اینکه مقایسه a == b در کد زیر خروجی false می‌دهد به تفاوت نوع داده‌های مقایسه‌شده بازمی‌گردد:

var a *int = nil
var b interface{} = nil
fmt.Println(a == b) // false


### توضیح:

- مقدار `a`: این یک اشاره‌گر از نوع *int است که به nil اشاره می‌کند. اگرچه مقدار آن nil است، ولی نوع آن هنوز هم *int است.
- مقدار `b`: این یک متغیر از نوع interface{} است که به nil اشاره می‌کند. در Go، وقتی یک interface{} مقدار nil دارد، هم مقدار آن و هم نوع آن باید nil باشد تا برابر با nil ارزیابی شود.

### چرا خروجی false است:
در مقایسه `a == b`، موارد زیر رخ می‌دهد:

1. `a` یک اشاره‌گر از نوع *int است و مقدار nil دارد.
2. b یک interface{} است که به nil اشاره می‌کند.

اما در Go، وقتی یک interface{} مقدار nil داشته باشد، نوع interface{} نیز باید nil باشد تا با nil مقایسه‌شده برابر باشد. در اینجا، نوع b یک interface{} است، اما در مقایسه a == b`، نوع `b برابر با *int است (چون a از نوع *int است و به interface{} تبدیل شده است). این تفاوت در نوع‌ها (*int در مقابل interface{}) باعث می‌شود که مقایسه false شود.

### نتیجه:
مقدار nil در Go به نوع آن وابسته است. حتی اگر هر دو متغیر مقدار nil داشته باشند، اگر نوع آن‌ها متفاوت باشد، مقایسه برابر نخواهد بود.


👑 @gopher_academy
🔥5👍32🍾2
🔵 عنوان مقاله
WorkOS: The Modern Identity Platform for B2B SaaS

🟢 خلاصه مقاله:
WorkOS است یک پلتفرم هویت مدرن برای B2B SaaS است که با ارائه API‌های انعطاف‌پذیر و آسان برای استفاده، ادغام SSO، SCIM و RBAC را در چند دقیقه به جای چند ماه ممکن می‌سازد. این پلتفرم توسط صدها استارتاپ در حال رشد بالا مانند Perplexity, Vercel, Drata, و Webflow مورد اعتماد است. WorkOS به کسب‌وکارها کمک می‌کند تا به سرعت و با امنیت بالا به راه‌حل‌های مختلف احراز هویت متصل شوند و مدیریت دسترسی و مدیریت هویت کاربران را با کارایی بالا ارائه دهند. این سرویس به شرکت‌ها این امکان را می‌دهد که بدون نیاز به ساخت زیرساخت‌های پیچیده خودشان، به‌سرعت به بازار عرضه شوند و رقابت را افزایش دهند.

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


👑 @gopher_academy
👍2
🔵 عنوان مقاله
Notes on Running Go in the Browser with WebAssembly

🟢 خلاصه مقاله:
در مقاله‌ای که توسط الی نوشته شده، روش‌های اساسی برای فراخوانی زبان برنامه‌نویسی Go از جاوااسکریپت، دستکاری DOM (مدل شیء سند)، استفاده از TinyGo به منظور کاهش حجم باینری WASM (WebAssembly) نهایی، و اجرای فرایندها به صورت همزمان با استفاده از Web Workers بررسی شده است. TinyGo به عنوان جایگزین کم حجم‌تری برای کامپایلر Go معرفی شده است که به واسطه تمرکز بر بهینه‌سازی‌های مربوط به حافظه و زمان اجرا، امکان پیاده‌سازی و اجرای برنامه‌های Go در محیط‌های محدود مانند وب را فراهم می‌آورد. همچنین توضیح داده شده که چگونه Web Workers می‌تواند به اجرای وظایف به صورت همزمان کمک کرده و منجر به بهبود عملکرد کلی برنامه شود بدون اینکه تاثیر منفی بر تجربه کاربر تحمیل گردد. این رویکردها قابلیت‌های جدیدی را برای توسعه‌دهندگان فراهم می‌آورند و امکان تعامل دقیق‌تر و کارآمدتر با تکنولوژی‌های وب را ارائه می‌دهند.

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


👑 @gopher_academy
3👍3
🔵 عنوان مقاله
Don't Pretty Print Your API's JSON Response Body

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

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


👑 @gopher_academy
👍4
🔵 عنوان مقاله
Streamline Your Product Delivery with monday dev

🟢 خلاصه مقاله:
مقاله‌ی مورد بحث به بررسی ابزار «monday dev» پرداخته که طراحی شده تا فرآیند توسعه محصولات را از ایده‌پردازی تا راه‌اندازی، تسریع بخشیده و ساده‌سازی کند. این ابزار همه جزئیات و مراحل لازم برای تحویل محصول را در یک محیط یکپارچه ارائه می‌دهد، به طوری که تیم‌های توسعه قادر خواهند بود به شکل مؤثرتری همکاری کنند و بر روی پیشبرد پروژه‌های خود تمرکز کنند. این سیستم با ارائه ابزارهای مدیریتی یکپارچه و امکان سفارشی‌سازی فرآیندها متناسب با نیاز تیم‌ها، به شرکت‌ها کمک می‌کند تا با سرعت و کیفیت بیشتری به نتایج مطلوب دست یابند؛ در نتیجه، موجب افزایش کارایی کلی در فرآیند توسعه محصول می‌شود.

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


👑 @gopher_academy
👍1
🖐درود به همه دوستان گرامی

🌟 با افتخار اعلام می‌کنیم که مجموعه کانال‌های لابدون رسماً افتتاح شد!


🧐 حالا لابدون چیه؟
در زبان گیلکی به "تار عنکبوت" در شرق گیلان لابدون و در غرب گیلان لابدآن می‌گن.

🍾و حالا ما با این نام، مجموعه‌ای از بهترین منابع آموزشی و خبری رو برای شما آماده کردیم!

👇 لیست کانال‌های مجموعه Labdon با به‌روزترین اخبار، آموزش‌ها و ترفندها در حوزه‌های مختلف:


🔵 گولنگ - همه چیز از اخبار تا نکات کلیدی
🔴 @gopher_academy

🔵 موقعیت شغلی های گولنگ چه ایرانی و چه خارجی
🔴 @gopher_job


🔵 انواع دیتابیس ها ردیس مانگو پستگرس و سایر دیتابیس ها
🔴 @database_academy
🟢 حوزه های تحت پوشش (redis , mysql , postgresl , mongo ,etc)

🔵 دنیای بلاکچین و ارز های دیجیتال
🔴 @Blockchain_labdon
🟢 حوزه های تحت پوشش (Bitcoin, Ethereum, Altcoins, Blockchain, Policy & Regulations, AI, NFTs, DeFi)


🔵 مهندسی نرم افزار
🔴 @software_labdon
🟢 حوزه های تحت پوشش (Engineering, Architecture, Design, Testing, Security , QA)


🔵 لینوکس- از توزیع‌ها تا ترفندهای امنیتی
🔴 @linux_labdon
🟢 حوزه های تحت پوشش (Linux Distributions, Open Source Software, Security Tips ,New Releases & Features)


🔵 دوآپـس - ابزارها و روندهای جدید
🔴 @devops_labdon
🟢 حوزه های تحت پوشش (CI/CD Pipelines, Cloud Infrastructure, Containerization & Orchestration, Monitoring & Performance, Infrastructure as Code, Security in DevOps)


🕸 @labdon_academy
👍71
Gopher Academy pinned «🖐درود به همه دوستان گرامی 🌟 با افتخار اعلام می‌کنیم که مجموعه کانال‌های لابدون رسماً افتتاح شد! 🧐 حالا لابدون چیه؟ در زبان گیلکی به "تار عنکبوت" در شرق گیلان لابدون و در غرب گیلان لابدآن می‌گن. 🍾و حالا ما با این نام، مجموعه‌ای از بهترین منابع آموزشی و…»
🔵 عنوان مقاله
Cryptography in Go: AES Encryption

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

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


👑 @gopher_academy
👍21
در کامپایل کردن برنامه‌های Go با استفاده از فلگ -ldflags، می‌توان فلگ‌های مختلفی را برای کنترل نحوه لینک‌دهی (linking) استفاده کرد. فلگ‌هایی که شما اشاره کردید (-s و -w) به طور خاص برای حذف اطلاعات اضافی مانند جدول سمبل‌ها و داده‌های اشکال‌زدایی هستند. در ادامه فلگ‌های دیگری که می‌توان با -ldflags استفاده کرد را لیست می‌کنم:

### فلگ‌های پرکاربرد:

1. **-s**:
حذف جدول سمبل‌ها (symbol table) از باینری نهایی، که باعث کاهش حجم فایل اجرایی می‌شود.
-w-w:
حذف اطلاعات اشکال‌زدایی DWARF از باینری. این کار باعث می‌شود برنامه اجرایی سبک‌تر شود اما دیباگ کردن آن مشکل‌تر باشد.

3.
-X <path/name>=<value>**:
این فلگ به شما اجازه می‌دهد که مقادیر متغیرهای رشته‌ای را در زمان کامپایل تغییر دهید. به طور معمول از این گزینه برای تنظیم اطلاعات نسخه یا بیلد در باینری استفاده می‌شود.
- مثال: go build -ldflags="-X 'main.version=1.0.0'"

4. **-extld=<linker>**:
این فلگ برای تعیین لینک‌کننده خارجی (external linker) استفاده می‌شود. معمولاً در پروژه‌هایی که با زبان‌های دیگر لینک می‌شوند، مانند C، استفاده می‌شود.
- مثال: go build -ldflags="-extld=gcc"

5. **-linkmode=<mode>**:
این فلگ مشخص می‌کند که لینک‌دهی چگونه انجام شود. حالت‌های مختلفی وجود دارد:
- internal:
لینک‌دهی به صورت داخلی (پیش‌فرض Go).
- external:
لینک‌دهی به وسیله لینک‌ک-buildid=<id>*-buildid=<id>**: برای تنظیم build ID که به صورت پیش‌فرض توسط Go ایجاد می‌شود، استفاده می‌شود.

7. **-compressdwarf=false**:
به طور پیش‌فرض Go اطلاعات DWARF را فشرده می‌کند. با این فلگ می‌توانید فشرده‌سازی ر-Bعال کنید.

8. **-B**:
این فلگ با -B در هنگام لینک کردن استفاده می‌شود تا از بازسازی باین-o <output-file>**-o <output-file>**: برای تعیین نام فایل اجرایی خروجی استفاده می‌شود.

### استفاده ترکیبی:
شما می‌توانید چندین فلگ را با هم ترکیب کنید. برای مثال:
go build -ldflags="-s -w -X 'main.version=1.0.0' -extld=gcc"

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

برای حذف سمبل‌ها (مثل اطلاعات اشکال‌زدایی یا سمبل‌های بلااستفاده) در یک برنامه Golang، می‌توانید از فلگ‌های خاصی هنگام کامپایل استفاده کنید. به عنوان مثال:

go build -ldflags="-s -w"

اینجا:
- فلگ -s جدول سمبل‌ها را حذف می‌کند.
- فلگ -w اطلاعات اشکال‌زدایی DWARF را حذف می‌کند.


👑 @gopher_academy
🔥61🍾1
🔵 عنوان مقاله
Building LLM-Powered Applications in Go

🟢 خلاصه مقاله:
مقاله‌ای که مدنظر قرار گرفته به بررسی روش‌های مختلف ساخت یک سرور نسل یافته‌شده با استفاده از ابزارهای متنوع مانند Gemini + Weaviate، LangChain و Genkit پرداخته است. این ابزارها جهت ایجاد یک محیط کاربرپذیر برای نسل محتوا با کمک فناوری‌های یادگیری عمیق و مدل‌های زبانی بزرگ (LLM) به کار می‌روند. در این مقاله به طور خاص نقش و تاثیر زبان برنامه‌نویسی Go در توسعه سیستم‌های نسل یافته‌شده (RAG) مورد توجه قرار گرفته، زیرا ویژگی‌های طبیعی زبان Go، مانند سرعت بالا و مدیریت حافظه بهینه، آن را به یک انتخاب مناسب برای پردازش و تولید محتوا در محیط‌های مبتنی بر LLM تبدیل کرده است. این روش‌ها و ابزارها به توسعه‌دهندگان کمک می‌کنند تا سرورهایی با قابلیت عملکرد بالا و دقت بهینه در تولید متن هوشمند بسازند.

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


👑 @gopher_academy
👍2
Forwarded from Bardia & Erfan
🔵 این مقاله به بررسی استفاده از زبان برنامه‌نویسی Rust در خط تولید ولوو می‌پردازد. در ابتدا، مقاله به این موضوع اشاره می‌کند که Rust به عنوان یک زبان امن و سریع برای برنامه‌نویسی سیستمی شناخته می‌شود و مزایای آن در مقایسه با زبان‌های دیگر مانند C و C++ بررسی می‌شود. ولوو از Rust برای برخی از پروژه‌های خود استفاده کرده است، که دلیل اصلی آن ویژگی‌های ایمنی حافظه و جلوگیری از باگ‌های رایج در مدیریت حافظه بوده است.

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


🟢 https://tweedegolf.nl/en/blog/137/rust-is-rolling-off-the-volvo-assembly-line

🕸 @labdon_academy
👨‍💻3👍1🍓1
🔵 عنوان مقاله
The TinyGo Playground (Now With More Resources)

🟢 خلاصه مقاله:
خلاصه مقاله:

بازی‌زمین (playground) TinyGo به شما امکان می‌دهد تا کدنویسی را با سخت‌افزارهای شبیه‌سازی‌شده مانند LEDها در مرورگر اینترنتی خود انجام دهید. اخیراً، منابع CPU و RAM موجود برای تست کردن در این محیط دو برابر شده‌است، که به کاربران اجازه می‌دهد تا عملکرد بهتر و تست‌های پیچیده‌تری را انجام دهند. علاوه بر این، اکنون قابلیت نمایش تخمین مصرف انرژی توسط کد نیز به آن اضافه شده است. این ویژگی‌های جدید به توسعه‌دهندگان کمک می‌کنند تا درک بهتری از کارایی و تأثیر کد خود بر روی سخت‌افزار واقعی داشته باشند.

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


👑 @gopher_academy
3❤‍🔥1👍1
اDWARF یک فرمت استاندارد برای ذخیره‌سازی اطلاعات اشکال‌زدایی (debugging information) است که توسط کامپایلرها تولید می‌شود. این اطلاعات به دیباگرها کمک می‌کند تا بتوانند کد ماشین را به کد منبعی که توسعه‌دهنده نوشته است، مرتبط کنند. DWARF شامل اطلاعاتی در مورد متغیرها، توابع، خطوط کد، و ساختارهای داده است که دیباگر می‌تواند از آنها برای دنبال کردن اجرای برنامه، تشخیص باگ‌ها، و نمایش دقیق متغیرها در طول اجرای برنامه استفاده کند.

چند مورد از اطلاعاتی که DWARF فراهم می‌کند:

1. نام متغیرها و توابع: DWARF حاوی اطلاعاتی در مورد متغیرها و توابعی است که در کد منبع تعریف شده‌اند. این اطلاعات به دیباگر کمک می‌کند تا هنگام بررسی وضعیت برنامه، نام متغیرها و توابع را نشان دهد.

2. آدرس‌دهی و محل متغیرها: DWARF به دیباگرها اجازه می‌دهد مکان دقیق متغیرها در حافظه (در رجیسترها یا پشته) را پیدا کنند.

3. اطلاعات نوع داده‌ها: DWARF اطلاعاتی در مورد نوع داده‌های متغیرها (مثل int، struct، array) را شامل می‌شود، که به دیباگرها اجازه می‌دهد تا مقادیر متغیرها را به درستی نمایش دهند.

4. ارتباط خطوط کد با کد ماشین: DWARF به دیباگر امکان می‌دهد که بین خطوط کد منبع (source code) و دستورات اجرایی (کد ماشین) ارتباط برقرار کند. به عنوان مثال، اگر خطایی در زمان اجرا رخ دهد، دیباگر می‌تواند خط دقیق در کد منبع را نمایش دهد.

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

حذف اطلاعات DWARF:
هنگامی که برنامه را برای استفاده نهایی (production) کامپایل می‌کنید، معمولاً اطلاعات DWARF را حذف می‌کنند (با فلگ -w) زیرا این اطلاعات تنها برای اشکال‌زدایی مفید است و در نسخه نهایی نیازی به آن نیست. حذف این اطلاعات باعث کاهش حجم فایل اجرایی و جلوگیری از افشای ساختار داخلی برنامه می‌شود.

👑 @gopher_academy
1👍21🎉1
🔵 عنوان مقاله
Script 0.23: Make It Easier to Write Shell-like Scripts in Go

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

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


👑 @gopher_academy
👍4🎉1
🔵 عنوان مقاله
Using Go Instead of Bash for Scripts

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

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


👑 @gopher_academy
👍2🎉1
جدول سمبل‌ها (Symbol Table) یک ساختار داده‌ای است که کامپایلرها و لینک‌کننده‌ها از آن استفاده می‌کنند تا اطلاعات مربوط به سمبل‌های موجود در برنامه را نگهداری کنند. سمبل‌ها می‌توانند شامل نام متغیرها، توابع، انواع داده‌ها، و اطلاعاتی درباره مکان و استفاده از این موارد در حافظه باشند.

کاربردهای جدول سمبل‌ها:

1. اشکال‌زدایی (Debugging): جدول سمبل‌ها به دیباگرها کمک می‌کند تا بتوانند کد سطح بالا را با کد ماشین مرتبط کنند. مثلاً وقتی در دیباگر متغیری را بررسی می‌کنید، از جدول سمبل‌ها برای یافتن آدرس آن متغیر استفاده می‌شود.

2. لینک‌دهی (Linking): در زمان لینک کردن بخش‌های مختلف یک برنامه، لینک‌کننده از جدول سمبل‌ها برای اتصال بخش‌های مختلف استفاده می‌کند. مثلاً اگر یک تابع در فایل A تعریف شده و در فایل B فراخوانی شده باشد، جدول سمبل‌ها کمک می‌کند لینک‌کننده آدرس درست آن تابع را پیدا کند.

3. بهینه‌سازی: جدول سمبل‌ها می‌تواند به کامپایلر در بهینه‌سازی کد کمک کند، چرا که اطلاعات مفیدی درباره استفاده و مکان متغیرها و توابع در اختیار دارد.

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

👑 @gopher_academy
👍2💅1
🔵 عنوان مقاله
FAIR: A Go Library for Serving Resources 'Fairly'

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

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


👑 @gopher_academy
👍31
🔵 عنوان مقاله
Maelstrom: A Fast, Contained Test Runner for Multiple Languages

🟢 خلاصه مقاله:
مجموعه‌ای از ابزارها که برای زبان‌های برنامه‌نویسی Go، Rust و Python پشتیبانی می‌کند، این ابزارها توانایی اجرای تست‌ها در میکرو-کانتینرهای ایزوله را دارند و ادعا می‌کند که به‌راحتی با تست‌های موجود شما کار می‌کنند. این تست‌ها می‌توانند هم بر روی ماشین محلی شما و هم در سراسر خوشه‌ای از سرورها اجرا شوند. اطلاعات بیشتر و دسترسی به کد این ابزارها از طریق مخزن GitHub قابل دسترس است. این امکان اطمینان می‌دهد که تست‌ها در محیط‌های کنترل‌شده و جدا شده به خوبی عمل کنند و به توسعه‌دهندگان این قدرت را می‌دهد که بتوانند بدون نگرانی از تداخل‌های محتمل، تست‌های خود را به‌طور مؤثری اجرا کنند.

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


👑 @gopher_academy
👍21🎉1
برای ایجاد یک نمونه ساده از چگونگی کار با Nginx و Golang، می‌توانید یک سرور وب ساده در Golang راه‌اندازی کنید و سپس Nginx را به عنوان یک پروکسی معکوس (reverse proxy) برای این سرور پیکربندی کنید.

### 1. ایجاد سرور وب ساده در Golang

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

// main.go
package main

import (
"fmt"
"net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, welcome to your subdomain!")
}

func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}

فایل بالا را به نام main.go ذخیره کنید و سپس با استفاده از دستور زیر سرور را اجرا کنید:

go run main.go

این سرور اکنون در حال اجرا بر روی پورت 8080 است و به هر درخواستی پاسخ می‌دهد.

### 2. پیکربندی Nginx به عنوان پروکسی معکوس

حال باید Nginx را به گونه‌ای پیکربندی کنید که به عنوان یک پروکسی معکوس عمل کند و درخواست‌ها را به سرور Golang ارسال کند.

ابتدا مطمئن شوید که Nginx نصب شده است. اگر نصب نشده، می‌توانید آن را با استفاده از دستورات زیر نصب کنید:

# On Ubuntu/Debian
sudo apt update
sudo apt install nginx

# On CentOS/RHEL
sudo yum install epel-release
sudo yum install nginx

سپس فایل پیکربندی Nginx را ویرایش کنید. فایل پیکربندی معمولاً در مسیر /etc/nginx/nginx.conf یا /etc/nginx/sites-available/default قرار دارد. محتوای فایل پیکربندی می‌تواند به شکل زیر باشد:

server {
listen 80;
server_name yourdomain.com *.yourdomain.com;

location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}

در این پیکربندی:
- listen 80;
باعث می‌شود Nginx به درخواست‌های HTTP روی پورت 80 گوش دهد.
- server_name yourdomain.com *.yourdomain.com;
باعث می‌شود Nginx به درخواست‌های دامنه اصلی و تمامی ساب‌دامین‌ها پاسخ دهد.
- proxy_pass http://127.0.0.1:8080;
درخواست‌ها را به سرور Golang که روی پورت 8080 اجرا می‌شود، هدایت می‌کند.
-
proxy_set_header
هدرهای HTTP مورد نیاز را تنظیم می‌کند.

### 3. راه‌اندازی و تست

بعد از ویرایش پیکربندی، Nginx را راه‌اندازی یا مجدداً راه‌اندازی کنید تا تنظیمات جدید اعمال شوند:

sudo systemctl restart nginx

اکنون Nginx به عنوان پروکسی معکوس عمل می‌کند و درخواست‌ها را به سرور Golang شما ارسال می‌کند. با ورود به دامنه yourdomain.com یا هر یک از ساب‌دامین‌های آن در مرورگر، باید پیام "Hello, welcome to your subdomain!" را مشاهده کنید.

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

با این پیکربندی، شما یک سرور Golang ساده دارید که توسط Nginx به عنوان پروکسی معکوس پشتیبانی می‌شود. Nginx درخواست‌ها را به سرور Golang ارسال می‌کند و پاسخ‌ها را به کاربر بازمی‌گرداند. این تنظیمات به شما اجازه می‌دهد تا ساب‌دامین‌های داینامیک را به راحتی مدیریت کنید و سرور Golang خود را به طور موثرتری به کاربران ارائه دهید.

👑 @gopher_academy
👍81
🔵 عنوان مقاله
PG Back Web 0.3: A Postgres Backup System with Web Interface

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

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


👑 @gopher_academy
👍1🙏1💯1