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، دو مفهوم 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
در 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