Ninja Learn | نینجا لرن
دوستان اگه تاالان محتوای کانال براتون مفید بوده و تونستم به علمتون کمی اضافه کنم. ممنون میشم با بوست کردن یا استار زدن از منو پستام حمایت کنید :) ❤️ 🔗 لینک بوست 👇 https://t.iss.one/boost/ninja_learn_ir ➖➖➖➖➖➖➖➖➖ 🔆 CHANNEL | GROUP
This media is not supported in your browser
VIEW IN TELEGRAM
❤🔥4🥰2
Ninja Learn | نینجا لرن
خب خب JWT چیه؟ ـJWT یا JSON Web Token یک استاندارد برای انتقال امن و فشرده اطلاعات بین کلاینت و سروره. این توکنها معمولاً برای احراز هویت و مجوز دسترسی استفاده میشن. از چه بخشهایی تشکیل شده؟ ـJWT از سه بخش اصلی تشکیل شده: ـHeader 🧾 شامل نوع توکن (معمولاً…
از اونجایی که بعضی هاتون ممکنه متوجه نشده باشید که چه اتفاقی داره میوفته
پیشنهاد میکنم ویدیو دوست خوبم سیروان جان رو حتما ببینید
مشاهده ویدیو
➖➖➖➖➖➖➖➖➖
پیشنهاد میکنم ویدیو دوست خوبم سیروان جان رو حتما ببینید
مشاهده ویدیو
➖➖➖➖➖➖➖➖➖
🔆 CHANNEL | GROUP
Linkedin
#jwt #http #authentication #رمزنگاری | Sirwan Geramipour | 55 comments
🔐 توکن های jwt چی هستن و چطور برای احراز هویت استفاده میشن؟ این موضوع ویدیوی هشتم از سری ویدیوهای رمزنگاری به زبان ساده اس.
🔑 توی این ویدیو یاد میگیریم که… | 55 comments on LinkedIn
🔑 توی این ویدیو یاد میگیریم که… | 55 comments on LinkedIn
🔥4
خیلی ممنون که تابه امروز کنارم بودید :)❤️
اگه نمیدونید چیه امار چنلمونه تواین مدتی که فعالیت میکنم
اینم لینک رباته برای گرفتن امار 👇
@telemetr_io_bot
➖➖➖➖➖➖➖➖➖
اگه نمیدونید چیه امار چنلمونه تواین مدتی که فعالیت میکنم
اینم لینک رباته برای گرفتن امار 👇
@telemetr_io_bot
➖➖➖➖➖➖➖➖➖
🔆 CHANNEL | GROUP
❤17🤩1
پست پیشنهادیتون چیه دوستان؟
(لطفا پیشنهادات مثل سری پیش خفن باشه)
(لطفا پیشنهادات مثل سری پیش خفن باشه)
🔥6
خب خب خب Django Channels چیه؟ و چرا من ازش خوشم نمیاد
قبل از اینکه با هم بریم سراغ Django Channels، یه کم درباره WebSocket بگیم که اصلاً بدونیم داریم درباره چی حرف میزنیم. خب، WebSocket یه پروتکل که بهت اجازه میده ارتباط دوطرفه و دائمی بین کلاینت و سرور داشته باشی. یعنی چی؟ یعنی مثلاً تو یه اپلیکیشن چت، به جای اینکه هر چند ثانیه یه بار درخواست بفرستی "چیزی جدید اومده؟"، سرور خودش هر وقت یه پیام جدید داشت، بلافاصله میفرسته سمتت 🚀.
حالا Django Channels چی میگه؟ 🤔
ـDjango Channels یه ابزار تو اکوسیستم Djangoئه که میاد پشتیبانی از WebSocket، پروتکلهای real-time و کارای async رو به پروژههات اضافه میکنه. به زبان ساده، اگه Django عادی رو یه "خیابون یکطرفه" فرض کنیم، Channels میاد این خیابون رو دوطرفه میکنه. این یعنی میتونی کارایی مثل:
و...
رو خیلی راحتتر با Django انجام بدی.
خب پس مشکلش چیه؟ چرا من ازش خوشم نمیاد؟ 🤷♂️
از دور که نگاه میکنی، Channels خیلی جذاب به نظر میاد، ولی وقتی میخوای باهاش کارکنی، مشکلات خودش رو نشون میده:
1⃣ پیچیدگی توی تنظیمات 😵💫
ـDjango همیشه به خاطر سادگی معروف بوده، ولی Channels میاد این سادگی رو خراب میکنه خیلی خراب میکنه. باید ASGI رو راه بندازی، Redis نصب کنی، routing یاد بگیری، و کلی تنظیمات دیگه انجام بدی. یه پروژه ساده که با Django راحت بود، یهو برات میشه یه جنگل از تنظیمات.
2⃣ وابستگی به Redis 🤦♂️
یکی از مشکلات بزرگ Channels اینه که برای مدیریت eventها و ارتباطها حتماً نیاز به Redis داره. خب چرا؟ دلیلش اینه که Redis بهعنوان message broker استفاده میشه تا پیامها بین کلاینتها و سرور مدیریت بشه. ولی اگه پروژه کوچیک باشه، این وابستگی میتونه دردسرساز بشه.
3⃣ محدودیت توی scale کردن 😩
اگه پروژه کوچیک باشه، Channels بد نیست. ولی وقتی تعداد کاربران زیاد میشه و حجم درخواستها بالا میره، Channels سریع از نفس میافته. این محدودیت بیشتر به خاطر پیچیدگی WebSocket و محدودیتهای سرورهای تک رشته ای هست تا خود Channels. برای پروژههای بزرگ و real-time محور، ابزارای دیگهای مثل Socket.IO یا FastAPI خیلی بهتر عمل میکنن.
4⃣ مشکلات performance 🚨
حتی اگه پروژه خیلی هم بزرگ نباشه، Channels برای real-time پروژههای سنگین خوب عمل نمیکنه. کارای پیچیده async و ارتباطات real-time میتونن سرور رو داغون کنن. البته با تنظیم درست workerها و Redis channel layers میتونی بخشی از این مشکلات رو کم کنی، ولی باز هم کار اضافهست.
5⃣ کمبود مستندات و منابع آموزشی درست و حسابی 📚
یکی دیگه از مشکلات اینه که منابع آموزشی کامل و بهروزی برای Channels خیلی کمه. هر وقت گیر کنی، یا باید بری توی GitHub دنبال issueها، یا دست به دامن دیگران بشی. این باعث میشه زمان زیادی صرف حل مشکلات کنی.
خب حالا راهحل چیه؟ 💡
اگه بخوای real-time کار کنی، اینا میتونن گزینههای بهتری باشن:
ـFastAPI: اگه دنبال سرعت، سادگی و پرفورمنس خوب هستی، FastAPI انتخاب فوقالعادهایه. با WebSocket خیلی راحت کار میکنه و خبری از دردسرای Channels نیست 🚀.
ـSocket.IO: این یکی برای پروژههای real-time شاهکاره. خیلی ابزارای متنوع داره و با Node.js هم عالی مچ میشه.
جمعبندی 🎯
ـDjango Channels میتونه برای پروژههای کوچیک و ساده مناسب باشه، ولی اگه بحث scale، پرفورمنس یا راحتی کار مطرح باشه، اصلاً گزینه خوبی نیست. من از پیچیدگیها و محدودیتهاش خسته شدم و به جای اون سراغ ابزارای دیگه رفتم.
نظر تو چیه؟ Django Channels تا حالا اذیتت کرده یا ازش خوشت میاد؟ بگو ببینم چی تو ذهنت میگذره🧐
➖➖➖➖➖➖➖➖➖
قبل از اینکه با هم بریم سراغ Django Channels، یه کم درباره WebSocket بگیم که اصلاً بدونیم داریم درباره چی حرف میزنیم. خب، WebSocket یه پروتکل که بهت اجازه میده ارتباط دوطرفه و دائمی بین کلاینت و سرور داشته باشی. یعنی چی؟ یعنی مثلاً تو یه اپلیکیشن چت، به جای اینکه هر چند ثانیه یه بار درخواست بفرستی "چیزی جدید اومده؟"، سرور خودش هر وقت یه پیام جدید داشت، بلافاصله میفرسته سمتت 🚀.
حالا Django Channels چی میگه؟ 🤔
ـDjango Channels یه ابزار تو اکوسیستم Djangoئه که میاد پشتیبانی از WebSocket، پروتکلهای real-time و کارای async رو به پروژههات اضافه میکنه. به زبان ساده، اگه Django عادی رو یه "خیابون یکطرفه" فرض کنیم، Channels میاد این خیابون رو دوطرفه میکنه. این یعنی میتونی کارایی مثل:
چت real-time 💬
نوتیفیکیشنهای فوری 🔔
استریم داده (مثل قیمتهای ارز دیجیتال) 📈
و...
رو خیلی راحتتر با Django انجام بدی.
خب پس مشکلش چیه؟ چرا من ازش خوشم نمیاد؟ 🤷♂️
از دور که نگاه میکنی، Channels خیلی جذاب به نظر میاد، ولی وقتی میخوای باهاش کارکنی، مشکلات خودش رو نشون میده:
1⃣ پیچیدگی توی تنظیمات 😵💫
ـDjango همیشه به خاطر سادگی معروف بوده، ولی Channels میاد این سادگی رو خراب میکنه خیلی خراب میکنه. باید ASGI رو راه بندازی، Redis نصب کنی، routing یاد بگیری، و کلی تنظیمات دیگه انجام بدی. یه پروژه ساده که با Django راحت بود، یهو برات میشه یه جنگل از تنظیمات.
نکته: از Django 4.0 به بعد، پشتیبانی از ASGI مستقیم داخل هسته Django اومده، پس برای پروژههای ساده شاید نیاز نباشه کل پروژه رو وابسته به Channels کنی.
2⃣ وابستگی به Redis 🤦♂️
یکی از مشکلات بزرگ Channels اینه که برای مدیریت eventها و ارتباطها حتماً نیاز به Redis داره. خب چرا؟ دلیلش اینه که Redis بهعنوان message broker استفاده میشه تا پیامها بین کلاینتها و سرور مدیریت بشه. ولی اگه پروژه کوچیک باشه، این وابستگی میتونه دردسرساز بشه.
جایگزین: میتونی از RabbitMQ یا حتی راهحلهای سادهتر مثل In-Memory Layers برای پروژههای سبک استفاده کنی.
3⃣ محدودیت توی scale کردن 😩
اگه پروژه کوچیک باشه، Channels بد نیست. ولی وقتی تعداد کاربران زیاد میشه و حجم درخواستها بالا میره، Channels سریع از نفس میافته. این محدودیت بیشتر به خاطر پیچیدگی WebSocket و محدودیتهای سرورهای تک رشته ای هست تا خود Channels. برای پروژههای بزرگ و real-time محور، ابزارای دیگهای مثل Socket.IO یا FastAPI خیلی بهتر عمل میکنن.
4⃣ مشکلات performance 🚨
حتی اگه پروژه خیلی هم بزرگ نباشه، Channels برای real-time پروژههای سنگین خوب عمل نمیکنه. کارای پیچیده async و ارتباطات real-time میتونن سرور رو داغون کنن. البته با تنظیم درست workerها و Redis channel layers میتونی بخشی از این مشکلات رو کم کنی، ولی باز هم کار اضافهست.
5⃣ کمبود مستندات و منابع آموزشی درست و حسابی 📚
یکی دیگه از مشکلات اینه که منابع آموزشی کامل و بهروزی برای Channels خیلی کمه. هر وقت گیر کنی، یا باید بری توی GitHub دنبال issueها، یا دست به دامن دیگران بشی. این باعث میشه زمان زیادی صرف حل مشکلات کنی.
خب حالا راهحل چیه؟ 💡
اگه بخوای real-time کار کنی، اینا میتونن گزینههای بهتری باشن:
ـFastAPI: اگه دنبال سرعت، سادگی و پرفورمنس خوب هستی، FastAPI انتخاب فوقالعادهایه. با WebSocket خیلی راحت کار میکنه و خبری از دردسرای Channels نیست 🚀.
ـSocket.IO: این یکی برای پروژههای real-time شاهکاره. خیلی ابزارای متنوع داره و با Node.js هم عالی مچ میشه.
جمعبندی 🎯
ـDjango Channels میتونه برای پروژههای کوچیک و ساده مناسب باشه، ولی اگه بحث scale، پرفورمنس یا راحتی کار مطرح باشه، اصلاً گزینه خوبی نیست. من از پیچیدگیها و محدودیتهاش خسته شدم و به جای اون سراغ ابزارای دیگه رفتم.
نظر تو چیه؟ Django Channels تا حالا اذیتت کرده یا ازش خوشت میاد؟ بگو ببینم چی تو ذهنت میگذره🧐
#programming #web #django
➖➖➖➖➖➖➖➖➖
🔆 CHANNEL | GROUP
👍25❤1👎1
❤6
Ninja Learn | نینجا لرن
از محتوای کانال راضی هستید؟
دوستان اگه عیبی هست بگید درستش کنم
نظراتتون خیلی ارزشمنده برام
نظراتتون خیلی ارزشمنده برام
❤8
Ninja Learn | نینجا لرن
از محتوای کانال راضی هستید؟
This media is not supported in your browser
VIEW IN TELEGRAM
❤6
دوستان ممنون میشم شیر بکنید پستارو :) ❤️
خیلی وقت عضو جدید نداشتیم.
خیلی وقت عضو جدید نداشتیم.
❤18🤣1
خب خب خب Sentry چیه؟ 🔍
اگه برنامه نویسی میکنی احتمالاً این سناریو برات آشناست:
کلی وقت میذاری، کد مینویسی، تست میکنی، همهچی درست کار میکنه. ولی وقتی میدی دست کاربر، یهو یه ارور عجیب غریب میاد که اصلاً نمیدونی از کجا دراومده اینجاست که Sentry وارد بازی میشه.
ـSentry چیه اصلاً؟
ـSentry یه ابزار خطایاب (Error Tracking) که کمک میکنه باگها و خطاهای پروژهت رو همون لحظهای که اتفاق میفتن، پیدا کنی.
این ابزار نهتنها ارورها رو جمعآوری میکنه، بلکه یه گزارش دقیق و کامل ازشون میده؛ از جزئیات خطا گرفته تا شرایطی که باعث شده ارور پیش بیاد.
فرض کن یه باگ تو اپلیکیشن ته که اصلاً قابل پیشبینی نبوده. بهجای اینکه کاربر بیاد غر بزنه یا خودت بری تو لاگها دنبال مشکل بگردی، Sentry خودش ارور رو تشخیص میده و گزارشش رو مستقیم برات میفرسته.
چرا Sentry محبوبه؟ 🌟
1⃣ گزارش ارور دقیق و کاربردی 🛠️
2⃣ پشتیبانی از پلتفرمهای مختلف 📱
3⃣ دستهبندی ارورها 🗂️
4⃣ هشدار و نوتیفیکیشن 🔔
5⃣ـ Release Tracking 🚀
6⃣ـPerformance Monitoring ⚡
چطور از Sentry استفاده کنیم؟
ثبتنام کن:
تو سایت Sentry.io یه اکانت بساز. نسخه رایگانش برای شروع کافیه.
نصب کن:
ـSDK مخصوص زبان پروژهت رو نصب کن. مثلاً برای Django این دستور کافیه:
تنظیمش کن:
با چند خط کد ساده Sentry رو به پروژه وصل کن:
ارورها رو مدیریت کن:
حالا هر اروری اتفاق بیفته، مستقیم تو داشبورد Sentry میره.
چند نکته مهم:
نسخه رایگان Sentry محدودیت داره (مثلاً تعداد ارورهای ماهانه). برای پروژههای بزرگ باید پلنهای پولیش رو بگیری.
میتونی از مستندات رسمی کمک بگیری تا تنظیمات حرفهایتر انجام بدی.
جمعبندی ✍
اگه میخوای ارورهای پروژهت رو حرفهای مدیریت کنی و حتی قبل از اینکه کاربر بفهمه، خودت رفعشون کنی، Sentry بهترین انتخابه. هم راحت نصب میشه، هم کلی قابلیت خفن داره.
تا حالا از Sentry استفاده کردی؟ نظرت چیه؟ 👀
➖➖➖➖➖➖➖➖➖
اگه برنامه نویسی میکنی احتمالاً این سناریو برات آشناست:
کلی وقت میذاری، کد مینویسی، تست میکنی، همهچی درست کار میکنه. ولی وقتی میدی دست کاربر، یهو یه ارور عجیب غریب میاد که اصلاً نمیدونی از کجا دراومده اینجاست که Sentry وارد بازی میشه.
ـSentry چیه اصلاً؟
ـSentry یه ابزار خطایاب (Error Tracking) که کمک میکنه باگها و خطاهای پروژهت رو همون لحظهای که اتفاق میفتن، پیدا کنی.
این ابزار نهتنها ارورها رو جمعآوری میکنه، بلکه یه گزارش دقیق و کامل ازشون میده؛ از جزئیات خطا گرفته تا شرایطی که باعث شده ارور پیش بیاد.
فرض کن یه باگ تو اپلیکیشن ته که اصلاً قابل پیشبینی نبوده. بهجای اینکه کاربر بیاد غر بزنه یا خودت بری تو لاگها دنبال مشکل بگردی، Sentry خودش ارور رو تشخیص میده و گزارشش رو مستقیم برات میفرسته.
چرا Sentry محبوبه؟ 🌟
1⃣ گزارش ارور دقیق و کاربردی 🛠️
وقتی یه ارور اتفاق میفته، Sentry دقیقاً بهت میگه مشکل کجاست. جزئیاتی مثل:
فایل و خط کدی که ارور داده
نوع خطا (Exception)
اطلاعات مرورگر یا دستگاه کاربر
وضعیت سرور (مثلاً رم و CPU)
حتی مراحل درخواست کاربر تا لحظهای که ارور رخ داده
2⃣ پشتیبانی از پلتفرمهای مختلف 📱
هرچی فکرش رو بکنی، Sentry ساپورتش میکنه.
Backend: Python (جنگو، فلاسک و ...)، Node.js
Frontend: React، Vue.js
Mobile: اندروید و iOS
DevOps: Docker، Kubernetes
3⃣ دستهبندی ارورها 🗂️
وقتی تعداد ارورها زیاد بشه، Sentry اونا رو گروهبندی میکنه. مثلاً یه باگ اگه صد بار اتفاق بیفته، همشون رو زیر یه گزارش میذاره که بتونی راحت مدیریت کنی.
4⃣ هشدار و نوتیفیکیشن 🔔
به محض اینکه یه ارور جدید اتفاق بیفته، سریع بهت خبر میده. از ایمیل گرفته تا Slack یا حتی پیامک.
5⃣ـ Release Tracking 🚀
یه قابلیت جالبش اینه که میتونی ارورها رو به نسخههای پروژت وصل کنی و بفهمی کدوم تغییرات باعث مشکل شده.
6⃣ـPerformance Monitoring ⚡
علاوه بر ارورها، میتونی بفهمی اپلیکیشن کجاها کنده.
چطور از Sentry استفاده کنیم؟
ثبتنام کن:
تو سایت Sentry.io یه اکانت بساز. نسخه رایگانش برای شروع کافیه.
نصب کن:
ـSDK مخصوص زبان پروژهت رو نصب کن. مثلاً برای Django این دستور کافیه:
pip install sentry-sdk
تنظیمش کن:
با چند خط کد ساده Sentry رو به پروژه وصل کن:
import sentry_sdk
sentry_sdk.init(
dsn="لینک DSN که Sentry میده",
traces_sample_rate=1.0
)
ارورها رو مدیریت کن:
حالا هر اروری اتفاق بیفته، مستقیم تو داشبورد Sentry میره.
چند نکته مهم:
نسخه رایگان Sentry محدودیت داره (مثلاً تعداد ارورهای ماهانه). برای پروژههای بزرگ باید پلنهای پولیش رو بگیری.
میتونی از مستندات رسمی کمک بگیری تا تنظیمات حرفهایتر انجام بدی.
جمعبندی ✍
اگه میخوای ارورهای پروژهت رو حرفهای مدیریت کنی و حتی قبل از اینکه کاربر بفهمه، خودت رفعشون کنی، Sentry بهترین انتخابه. هم راحت نصب میشه، هم کلی قابلیت خفن داره.
تا حالا از Sentry استفاده کردی؟ نظرت چیه؟ 👀
#programming #python #sentry
➖➖➖➖➖➖➖➖➖
🔆 CHANNEL | GROUP
Sentry
Application Performance Monitoring & Error Tracking Software
Application performance monitoring for developers & software teams to see errors clearer, solve issues faster & continue learning continuously. Get started at sentry.io.
❤17
Ninja Learn | نینجا لرن
میخوام شروع کنم درمورد golang هم پست بزارم
چرا ؟
ـGo که خیلی خوبه 🤔
اونایی که گفتن نه دوست دارم دلیلشون رو بدونم
ـGo که خیلی خوبه 🤔
اونایی که گفتن نه دوست دارم دلیلشون رو بدونم
❤2👎1
Ninja Learn | نینجا لرن
میخوام شروع کنم درمورد golang هم پست بزارم
نسبت به راعی اکثریت عمل میکنم
اگه 👎
درمورد همون پایتون و اینا پست میزارم
اگه 👍
درمورد go هم پست میزارم
(روی این پست ریکشن نزنید روی همون پستی که ریپلای زدم ریکشن بزنید)
اگه 👎
درمورد همون پایتون و اینا پست میزارم
اگه 👍
درمورد go هم پست میزارم
(روی این پست ریکشن نزنید روی همون پستی که ریپلای زدم ریکشن بزنید)
👍36👎11👌2
Ninja Learn | نینجا لرن
میخوام شروع کنم درمورد golang هم پست بزارم
خب پست go هم داریم از این به بعد 😁
👎15👍9🔥4
سال نو شد
کریسمس رو به مسیحی های کانال تبریک میگم 😂❤️
کریسمس رو به مسیحی های کانال تبریک میگم 😂❤️
🤣18👍7👎3🔥3
خب خب خب پکیج fmt در go
این پکیج (fmt) یکی از پراستفادهترین و مهمترین ابزارهای Go هست که برای کار با ورودی و خروجیها استفاده میشه. بیاین ببینیم چطور کار میکنه.
توابع پرکاربرد fmt 🛠️
پکیج fmt یه سری توابع داره که هر کدوم برای هدف خاصی طراحی شدن. مهمترینشون رو اینجا لیست کردم:
1⃣ Print و Println
برای چاپ اطلاعات روی کنسول:
Output:
2⃣ Printf
برای چاپ با فرمت خاص:
Output:
3⃣ Sprintf
مثل Printf عمل میکنه، ولی خروجی رو به جای چاپ، به صورت رشته برمیگردونه:
Output:
4⃣ Fprintf
اطلاعات رو به جای کنسول، به فایل یا هر io.Writer دیگهای میفرسته:
5⃣ Scan و Scanf
برای گرفتن ورودی از کاربر:
Output (Example input: "Ali", "20"):
پشت پرده fmt: چطور کار میکنه؟ 🧐
حالا که با توابع آشنا شدی، بد نیست بدونی fmt پشت صحنه چطور دادهها رو مدیریت میکنه.
1⃣ استفاده از Interfaces
ـfmt از دو اینترفیس مهم استفاده میکنه:
ـStringer:
مثال:
Output:
2⃣ـ Reflection
پکیج fmt از پکیج reflect استفاده میکنه تا نوع دادهها رو در زمان اجرا بررسی کنه. یعنی وقتی %v یا سایر placeholders رو استفاده میکنی، fmt میتونه بفهمه چه نوع دادهای داری و چطور باید چاپش کنه.
Output:
فرمتدهی دادهها با fmt 🎨
پکیج fmt قابلیتهای فرمتدهی خیلی خوبی داره که بیشتر اوقات به کار میان:
اعداد
Output:
رشتهها
Output:
منطق (Boolean)
Output:
جمعبندی ✍
پکیج fmt یکی از ابزارهای قدرتمند Go هست که با توابع ساده و قابلیتهای فرمتدهی پیشرفته، کار برنامهنویسا رو راحت کرده.
➖➖➖➖➖➖➖➖➖
این پکیج (fmt) یکی از پراستفادهترین و مهمترین ابزارهای Go هست که برای کار با ورودی و خروجیها استفاده میشه. بیاین ببینیم چطور کار میکنه.
توابع پرکاربرد fmt 🛠️
پکیج fmt یه سری توابع داره که هر کدوم برای هدف خاصی طراحی شدن. مهمترینشون رو اینجا لیست کردم:
1⃣ Print و Println
برای چاپ اطلاعات روی کنسول:
ـPrint: متنها رو بدون فاصله چاپ میکنه.
ـPrintln: بین متنها فاصله میذاره و یه خط جدید اضافه میکنه.
fmt.Print("Hello") fmt.Print("World") fmt.Println("Hello") fmt.Println("World")
Output:
HelloWorld
Hello
World
2⃣ Printf
برای چاپ با فرمت خاص:
name := "Ali"
age := 20 fmt.Printf(
"Name: %s,
Age: %d\n",
name, age
)
Output:
Name: Ali, Age: 20
3⃣ Sprintf
مثل Printf عمل میکنه، ولی خروجی رو به جای چاپ، به صورت رشته برمیگردونه:
name := "Ali"
greeting := fmt.Sprintf(
"Hello,
%s!",
name
)
fmt.Println(greeting)
Output:
Hello, Ali!
4⃣ Fprintf
اطلاعات رو به جای کنسول، به فایل یا هر io.Writer دیگهای میفرسته:
file, _ := os.Create("output.txt")
fmt.Fprintf(file, "Hello, %s!", "File")
5⃣ Scan و Scanf
برای گرفتن ورودی از کاربر:
ـScan: ورودی ساده رو میخونه.
ـScanf: ورودی رو با فرمت مشخص میخونه.
var name string
fmt.Println("Enter your name:")
fmt.Scanln(&name)
fmt.Println("Your name is:", name)
var age int
fmt.Println("Enter your age:")
fmt.Scanf("%d", &age)
fmt.Println("Your age is:", age)
Output (Example input: "Ali", "20"):
Enter your name:
Your name is: Ali
Enter your age:
Your age is: 20
پشت پرده fmt: چطور کار میکنه؟ 🧐
حالا که با توابع آشنا شدی، بد نیست بدونی fmt پشت صحنه چطور دادهها رو مدیریت میکنه.
1⃣ استفاده از Interfaces
ـfmt از دو اینترفیس مهم استفاده میکنه:
ـStringer:
اگه struct این اینترفیس رو پیادهسازی کرده باشه، متد String() برای چاپ خروجی فراخوانی میشه.ـError:
برای ارورها، متد Error() فراخوانی میشه.
مثال:
type Person struct {
Name string
Age int
}
func (p Person) String() string {
return fmt.Sprintf("Name: %s, Age: %d", p.Name, p.Age)
}
func main() {
person := Person{"Ali", 20}
fmt.Println(person)
}
Output:
Name: Ali, Age: 20
2⃣ـ Reflection
پکیج fmt از پکیج reflect استفاده میکنه تا نوع دادهها رو در زمان اجرا بررسی کنه. یعنی وقتی %v یا سایر placeholders رو استفاده میکنی، fmt میتونه بفهمه چه نوع دادهای داری و چطور باید چاپش کنه.
x := 42
fmt.Printf("Type: %T, Value: %v\n", x, x)
Output:
Type: int, Value: 42
فرمتدهی دادهها با fmt 🎨
پکیج fmt قابلیتهای فرمتدهی خیلی خوبی داره که بیشتر اوقات به کار میان:
اعداد
%d: عدد صحیح
%f: عدد اعشاری
%.2f: عدد اعشاری با 2 رقم اعشار
%b: نمایش در مبنای 2
%x: نمایش در مبنای 16
num := 42
pi := 3.14159
fmt.Printf("Decimal: %d, Binary: %b, Hex: %x, Pi: %.2f\n", num, num, num, pi)
Output:
Decimal: 42, Binary: 101010, Hex: 2a, Pi: 3.14
رشتهها
%s: نمایش رشته
%q: رشته با کوتیشن
%+v: struct با نام فیلدها
%v: مقدار خام
type Person struct {
Name string
Age int
}
p := Person{"Ali", 20}
fmt.Printf("Raw: %v, With Fields: %+v\n", p, p)
Output:
Raw: {Ali 20}, With Fields: {Name:Ali Age:20}
منطق (Boolean)
%t: مقدار True یا False رو چاپ میکنه.
isGoAwesome := true
fmt.Printf("Is Go awesome? %t\n", isGoAwesome)
Output:
Is Go awesome? true
جمعبندی ✍
پکیج fmt یکی از ابزارهای قدرتمند Go هست که با توابع ساده و قابلیتهای فرمتدهی پیشرفته، کار برنامهنویسا رو راحت کرده.
#programming #go
➖➖➖➖➖➖➖➖➖
🔆 CHANNEL | GROUP
👍15👎9❤1