کداکسپلور | CodeExplore
7.84K subscribers
1.89K photos
263 videos
103 files
1.57K links
با کد اکسپلور یاد بگیر، لذت ببر و بروز باش ⚡️😉

سایت کد‌اکسپلور:
CodeExplore.ir
👨🏻‍💻 ارتباط با ما :
@CodeExploreSup
گروه :
@CodeExplore_Gap
تبلیغات در کد اکسپلور :
@CodeExploreAds
Download Telegram
📚 کتاب Golang By Example (online)

یادگیری زبان Go با مثال

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

این کتاب آنلاینه و از لینک زیر میتونید بهش دسترسی داشته باشین:

👉🏻 golangbyexample.com

#book #golang
☕️ @CodeExplore
🔥10
کداکسپلور | CodeExplore
🚀 ۳ ابزار کاربردی برای کار با API و JSON 🔸 ‏Postman ابزاری قدرتمند برای تست و مدیریت APIهای REST و GraphQL با محیط گرافیکی حرفه‌ای. پشتیبانی از انواع متد، مدیریت Token و ساخت کالکشن تست. 🔗 postman.com 🔸 ‏Insomnia جایگزینی سبک، سریع و ساده برای Postman…
🚀 تفاوت Anonymous Struct و Named Struct در Go + کاربرد واقعی در ساخت API

در زبان Go، دو نوع ساختار (struct) پرکاربرد داریم که بسته به نیاز، استفاده از یکی نسبت به دیگری بهتره. اینجا با یه مثال واقعی از دنیای API برات توضیح می‌دیم که چرا و کجا از هر کدوم استفاده کنیم:

🔸 ساختار نام‌دار (Named Struct)
ساختاری با اسم مشخص که می‌تونه چندین‌بار در بخش‌های مختلف پروژه استفاده بشه. برای مدل‌سازی دیتاهایی مثل کاربر، محصول یا درخواست لاگین خیلی مفیده.

مزایا:
• قابل استفاده مجدد
• خوانایی بالا
• سازماندهی بهتر کد

type LoginRequest struct {
Username string `json:"username"`
Password string `json:"password"`
}

func LoginHandler(c *gin.Context) {
var req LoginRequest
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(400, gin.H{"error": "invalid request"})
return
}
// استفاده از req.Username و req.Password
}

🔸 ساختار بی‌نام (Anonymous Struct)
وقتی فقط یک‌بار قراره از یه ساختار ساده استفاده کنی و نمی‌خوای struct جداگانه تعریف کنی، این روش خیلی سریع و کارآمده. مخصوصاً توی پارس کردن سریع کوئری‌ها یا تست‌های سبک.

مزایا:
• کد سریع‌تر و تمیزتر
• بدون نیاز به تعریف نوع جدا
• مناسب برای موارد موقتی یا کوچک
func SearchHandler(c *gin.Context) {
var query struct {
Q string form:"q"
Page int form:"page"
}

if err := c.ShouldBindQuery(&query); err != nil {
c.JSON(400, gin.H{"error": "bad query"})
return
}

// استفاده از query.Q و query.Page
}
🎯 جمع‌بندی:
اگر ساختار رو در چند جای پروژه استفاده می‌کنی ➡️ ساختار نام‌دار (Named Struct)
اگر فقط برای یک‌بار یا در یک فانکشن خاص استفاده داری ➡️ ساختار بی‌نام (Anonymous Struct)

#GoLang #Struct #Gin #API #Backend #برنامه‌نویسی #گو
☕️Telegram | Website | Discord
❤‍🔥6🔥3💔2
سایت boot dev ، یادگیری با شروع کد نویسی 🔥

🔸️ سایت Boot.dev یه پلتفرم آموزش آنلاینه که با تمرکز روی کدنویسی عملی و بازی‌وار، بهت کمک می‌کنه از همون اول با نوشتن کد، برنامه‌نویسی رو تو مغزت حک کنی! بیشتر از 100 هزار نفر تا حالا از دوره‌هاش استفاده کردن.

🔹️ دوره هاش شامل Python، JavaScript، Go، ساخت API، دیتابیس و مفاهیم پایه‌ای علوم کامپیوتره، اونم بدون ویدیوهای طولانی و خسته‌کننده — فقط تمرین‌های مرحله‌به‌مرحله و بازخورد فوری! اگه دنبال یادگیری واقعی‌ای، Boot.dev یه گزینه جدیه.

#bootdev #site #python #go #golang #programming
☕️Telegram | Website | Discord
❤‍🔥10🔥3💔3
🚀توضیح Closure Function در Go — ابزار قدرتمند برای نگه‌داری وضعیت (State)
در زبان Go، توابع می‌تونن داخل خودشون توابع دیگه تعریف و برگردونن. اگر اون تابع داخلی به متغیرهای خارج از خودش دسترسی داشته باشه، بهش می‌گیم Closure.

یعنی توابعی که محیط اطرافشون رو به‌خاطر می‌سپارن حتی بعد از خروج از اون محیط.

مثال واقعی: شمارنده با Closure
func counter() func() int {
count := 0
return func() int {
count++
return count
}
}

func main() {
c := counter()
fmt.Println(c()) // 1
fmt.Println(c()) // 2
fmt.Println(c()) // 3
}


📌 هر بار که تابع ()c اجرا می‌شه، مقدار count رو یکی زیاد می‌کنه، چون اون تابع داخلی به count دسترسی داره و وضعیتش رو حفظ کرده.

🎯 کاربردهای واقعی Closure در Go:
نگه‌داری وضعیت بدون استفاده از struct
تولید توابع سفارشی‌شده با داده‌ی خاص
ساختن توابع داینامیک مثل Middleware، Filter و Validator
پیاده‌سازی رفتارهای فانکشنال (مثل map، reduce، chain)

🧠 چرا مهمه؟
Closureها بهت این امکان رو می‌دن که کد تمیزتر، ماژولارتر و با قابلیت ترکیب‌پذیری بالا بنویسی — بدون نیاز به تعریف نوع یا ساختارهای پیچیده.


#GoLang #Struct #Gin #API #Backend #برنامه‌نویسی #گو
☕️Telegram | Website | Discord
❤‍🔥5💔31🔥1
🚀 توابع Currying در Go — ساخت توابع مرحله‌ای و داینامیک با قدرت Closures
در Go، مثل زبان‌های فانکشنال، می‌تونی توابعی بسازی که به جای گرفتن همه آرگومان‌ها یک‌جا، هر آرگومان رو در یک مرحله بگیرن. به این تکنیک می‌گیم:

🎯 Currying
یعنی تبدیل تابعی با چند آرگومان به توابع تو در تو، که هر کدوم فقط یک آرگومان می‌گیرن.

مثال واقعی: ضرب با عدد ثابت
func multiply(x int) func(int) int {
return func(y int) int {
return x * y
}
}

func main() {
times10 := multiply(10)
fmt.Println(times10(3)) // 30
fmt.Println(times10(7)) // 70
}


📌 اینجا تابع multiply(10) خودش یه تابع جدید می‌سازه (times10) که همیشه با ۱۰ ضرب می‌کنه.

🧠 به چه دردی می‌خوره؟
ساخت توابع با پارامترهای پیش‌فرض
پیاده‌سازی ساده‌تر توابع داینامیک
خوانایی و تست‌پذیری بهتر
کمک به معماری فانکشنال در Go با ترکیب‌پذیری بالا

🧩 حتی می‌تونی با Generic‌ها توابع کلی بسازی:
func curry2[A, B, C any](f func(A, B) C) func(A) func(B) C {
return func(a A) func(B) C {
return func(b B) C {
return f(a, b)
}
}
}

حالا می‌تونی توابع ۲ پارامتری رو به صورت مرحله‌ای صدا بزنی:

add := func(x, y int) int { return x + y }
curriedAdd := curry2(add)

fmt.Println(curriedAdd(2)(3)) // 5

#GoLang #Currying #Closure #Functions #Backend #برنامه_نویسی #گو
☕️Telegram | Website | Discord
🔥7
چی(Chi) چیه؟🤔

کتابخونه‌ی Chi یکی از سبک‌ ترین و در عین حال قدرتمندترین ابزارهای ساخت REST API در زبان Go هست. این لایبرری با هدف ساده‌ سازی مدیریت روت‌ها و middlewareها طراحی شده و در عین حال از net/http استاندارد Go استفاده می‌کنه.

کتابخونه‌ی Chi به درد برنامه‌ نویسایی می‌خوره که دنبال ساختاری مرتب، توسعه‌ پذیر و مناسب پروژه‌ های متوسط تا بزرگ هستن.

💣 Chi چند ویژگی مهم داره:

تعریف روت‌ها به شکل تمیز و خوانا

پشتیبانی از middleware به صورت تو در تو (nested)

پشتیبانی کامل از context و گروهبندی مسیرها

سازگار با net/http و بدون نیاز به یاد گرفتن چیزی عجیب‌ غریب

👀 یه مثال خیلی ساده:
فرض کن یه API داری که لیست کاربران رو برمی‌گردونه. با net/http باید مسیر رو دستی مدیریت کنی و اگر middleware هم بخوای اضافه کنی، کارت سخت میشه. ولی با Chi خیلی راحت مسیر /users رو تعریف می‌کنی، middleware هم بهش می‌چسبونی و تمام.

📊 مقایسه با net/http:

با net/http همه چیز پایه‌ای و دستی انجام میشه. برای پروژه‌ های خیلی کوچیک خوبه ولی وقتی کارت بزرگ شد، مدیریت مسیرها و middlewareها اذیتت می‌کنه.

ولی Chi از همون پایه با هدف راحتی توسعه ساخته شده. مثل یه اسکلتیه که کمک می‌کنه پروژه‌ات رو ماژولارتر بنویسی. اگه دنبال یه ساختار MVC تمیز هستی، Chi انتخاب خیلی خوبیه.

خیلی از فریم‌ ورک‌ های Go محور یا پروژه‌ های حرفه‌ای از Chi استفاده می‌کنن چون هم سبک و سریع‌ ـه، هم ساختار پروژه رو مرتب نگه می‌داره.

اگه تا حالا باش کار کردی تو کامنتا بنویس👇🏻

#chi #golang
☕️Telegram | Website | Discord
3🔥2❤‍🔥1