کداکسپلور | CodeExplore
🚀 ۳ ابزار کاربردی برای کار با API و JSON 🔸 Postman ابزاری قدرتمند برای تست و مدیریت APIهای REST و GraphQL با محیط گرافیکی حرفهای. ✅ پشتیبانی از انواع متد، مدیریت Token و ساخت کالکشن تست. 🔗 postman.com 🔸 Insomnia جایگزینی سبک، سریع و ساده برای Postman…
🚀 تفاوت Anonymous Struct و Named Struct در Go + کاربرد واقعی در ساخت API
در زبان Go، دو نوع ساختار (struct) پرکاربرد داریم که بسته به نیاز، استفاده از یکی نسبت به دیگری بهتره. اینجا با یه مثال واقعی از دنیای API برات توضیح میدیم که چرا و کجا از هر کدوم استفاده کنیم:
🔸 ساختار نامدار (Named Struct)
ساختاری با اسم مشخص که میتونه چندینبار در بخشهای مختلف پروژه استفاده بشه. برای مدلسازی دیتاهایی مثل کاربر، محصول یا درخواست لاگین خیلی مفیده.
✅ مزایا:
• قابل استفاده مجدد
• خوانایی بالا
• سازماندهی بهتر کد
🔸 ساختار بینام (Anonymous Struct)
وقتی فقط یکبار قراره از یه ساختار ساده استفاده کنی و نمیخوای struct جداگانه تعریف کنی، این روش خیلی سریع و کارآمده. مخصوصاً توی پارس کردن سریع کوئریها یا تستهای سبک.
✅ مزایا:
• کد سریعتر و تمیزتر
• بدون نیاز به تعریف نوع جدا
• مناسب برای موارد موقتی یا کوچک
func SearchHandler(c *gin.Context) {
var query struct {
Q string
Page int
}
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
در زبان 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
🚀توضیح Closure Function در Go — ابزار قدرتمند برای نگهداری وضعیت (State)
در زبان Go، توابع میتونن داخل خودشون توابع دیگه تعریف و برگردونن. اگر اون تابع داخلی به متغیرهای خارج از خودش دسترسی داشته باشه، بهش میگیم Closure.
یعنی توابعی که محیط اطرافشون رو بهخاطر میسپارن حتی بعد از خروج از اون محیط.
✅ مثال واقعی: شمارنده با Closure
📌 هر بار که تابع ()c اجرا میشه، مقدار count رو یکی زیاد میکنه، چون اون تابع داخلی به count دسترسی داره و وضعیتش رو حفظ کرده.
🎯 کاربردهای واقعی Closure در Go:
✅ نگهداری وضعیت بدون استفاده از struct
✅ تولید توابع سفارشیشده با دادهی خاص
✅ ساختن توابع داینامیک مثل Middleware، Filter و Validator
✅ پیادهسازی رفتارهای فانکشنال (مثل map، reduce، chain)
🧠 چرا مهمه؟
Closureها بهت این امکان رو میدن که کد تمیزتر، ماژولارتر و با قابلیت ترکیبپذیری بالا بنویسی — بدون نیاز به تعریف نوع یا ساختارهای پیچیده.
#GoLang #Struct #Gin #API #Backend #برنامهنویسی #گو
☕️Telegram | Website | Discord
در زبان 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💔3⚡1🔥1