مرجع
واژهنامه
اصطلاحهای انگلیسی Go همراه با برابر فارسی، توضیح کوتاه و نزدیکترین مفهوم در Python.
۳۴ اصطلاح
- arrayآرایه
- دنبالهای با طول ثابت که طولش بخشی از نوع آن است؛ برای نمونه [4]int و [5]int دو نوع متفاوتاند. هنگام انتساب کپی میشود.
- Python: معادل مستقیم ندارد؛ tuple با طول ثابت کمی شبیه آن است.
- binaryفایل اجرایی
- خروجی go build: یک فایل کد ماشین که runtime خود Go را درون خود دارد و بدون نصب Go اجرا میشود.
- Python: معادل مستقیم ندارد؛ برنامهٔ Python برای اجرا به مفسر نیاز دارد.
- build cacheحافظهٔ نهان ساخت
- محلی که نتیجهٔ کامپایل هر package نگه داشته میشود تا کد تغییرنکرده دوباره کامپایل نشود. مسیر آن در متغیر GOCACHE است.
- Python: نقش آن شبیه پوشهٔ __pycache__ است.
- channelکانال
- مجرای نوعدار برای فرستادن و گرفتن مقدار بین goroutineها. ارتباط و همگامسازی را با هم انجام میدهد.
- Python: شبیه queue.Queue یا asyncio.Queue.
- closureبستار
- تابعی که به متغیرهای محدودهٔ بیرونی خود دسترسی دارد و آنها را زنده نگه میدارد.
- Python: همان مفهوم closure در Python.
- contextزمینه
- مقداری که مهلت زمانی، سیگنال لغو و دادهٔ وابسته به درخواست را بین لایهها و goroutineها منتقل میکند.
- deferتعویق
- اجرای یک فراخوانی را تا لحظهٔ بازگشت تابع به تأخیر میاندازد. برای آزاد کردن منابع مثل فایل و قفل استفاده میشود.
- Python: نقش try/finally و context manager با with را دارد.
- embeddingجاسازی
- قرار دادن یک نوع بدون نام فیلد درون struct یا interface دیگر، تا فیلدها و methodهای آن ارتقا پیدا کنند. ابزار composition در Go است.
- Python: جایگزین بسیاری از کاربردهای وراثت.
- errorخطا
- یک interface داخلی با تنها method به نام Error. خطا در Go یک مقدار بازگشتی معمولی است که صریح بررسی میشود.
- Python: جایگزین مدل exception در Python.
- escape analysisتحلیل گریز
- تحلیلی در کامپایلر که تعیین میکند یک متغیر میتواند روی stack بماند یا باید به heap منتقل شود.
- garbage collectorزبالهروب
- بخشی از runtime که حافظهٔ بدون ارجاع را خودکار آزاد میکند. در Go همروند و از نوع mark and sweep است.
- Python: CPython عمدتاً از شمارش ارجاع و یک جمعآور چرخهای استفاده میکند.
- genericsنوعهای عمومی
- امکان نوشتن تابع و نوع با پارامتر نوعی، تا یک کد برای چند نوع مختلف کار کند و ایمنی نوع حفظ شود.
- Python: نزدیک به TypeVar و generic در typing.
- GOPATHپوشهٔ کاری Go
- پوشهٔ کاری Go که پیشفرض آن پوشهٔ go در خانهٔ کاربر است. cache ماژولها و ابزارهای نصبشده با go install در آن قرار میگیرند. دیگر لازم نیست کد پروژه داخل آن باشد.
- GOROOTریشهٔ نصب Go
- پوشهای که خود toolchain و کتابخانهٔ استاندارد در آن قرار دارد. معمولاً نیازی به تنظیم دستی آن نیست.
- Python: شبیه محل نصب مفسر Python.
- goroutineگوروتین
- یک تابع در حال اجرای همروند که runtime خود Go آن را زمانبندی میکند. بسیار سبکتر از thread سیستمعامل است و با کلیدواژهٔ go ساخته میشود.
- Python: نزدیکترین معادل: coroutine در asyncio یا thread، با این تفاوت که goroutine میتواند واقعاً موازی روی چند هسته اجرا شود.
- interfaceواسط
- مجموعهای از امضای methodها. هر نوعی که همهٔ آن methodها را داشته باشد، بدون اعلام صریح، آن interface را برآورده میکند.
- Python: نزدیک به typing.Protocol و duck typing؛ برخلاف ABC نیازی به ارثبری نیست.
- mapنگاشت
- ساختار کلید به مقدار مبتنی بر جدول درهمسازی. ترتیب پیمایش آن تضمینشده نیست و برای دسترسی همزمان امن نیست.
- Python: معادل dict، با این تفاوت که dict ترتیب درج را نگه میدارد.
- methodمتد
- تابعی که به یک نوع وصل است و یک receiver دارد. روی هر نوع تعریفشده در همان package قابل تعریف است، نه فقط struct.
- middlewareمیانافزار
- تابعی که یک http.Handler را میگیرد و Handler دیگری برمیگرداند تا رفتاری مثل لاگ یا احراز هویت را پیش و پس از درخواست اضافه کند.
- Python: همان نقش middleware در Django.
- moduleماژول
- مجموعهای از packageها که با هم نسخهبندی و منتشر میشوند و با فایل go.mod تعریف میشوند.
- Python: نزدیک به یک پروژه با pyproject.toml.
- mutexقفل انحصاری
- قفلی که تضمین میکند در هر لحظه فقط یک goroutine به بخش بحرانی دسترسی دارد.
- Python: معادل threading.Lock.
- nilتهی
- zero value نوعهای pointer، slice، map، channel، تابع و interface. برخلاف None یک شیء یکتا نیست و نوع دارد.
- Python: نزدیک به None.
- packageبسته
- واحد سازماندهی و کامپایل کد در Go. همهٔ فایلهای یک پوشه عضو یک package هستند و نامهایی که با حرف بزرگ شروع میشوند از بیرون دیده میشوند.
- Python: نزدیک به module و package در Python.
- panicوحشت
- توقف ناگهانی جریان عادی برنامه برای خطاهای غیرقابل ادامه، مثل دسترسی بیرون از محدودهٔ slice. برای خطاهای عادی از مقدار error استفاده میشود، نه panic.
- Python: شبیه بالا آمدن exception، ولی فقط برای موارد استثنایی.
- pointerاشارهگر
- مقداری که نشانی یک متغیر را نگه میدارد. در Go حساب اشارهگر وجود ندارد و حافظه را garbage collector مدیریت میکند.
- Python: در Python همهٔ نامها ارجاع به شیء هستند و اشارهگر صریح وجود ندارد.
- race conditionوضعیت رقابتی
- خطایی که وقتی رخ میدهد که چند goroutine همزمان و بدون همگامسازی به یک داده دسترسی دارند و دستکم یکی مینویسد. با پرچم -race قابل کشف است.
- receiverگیرنده
- پارامتر ویژهٔ method که مشخص میکند method روی چه نوعی تعریف شده است. میتواند مقداری (value receiver) یا اشارهگری (pointer receiver) باشد.
- Python: نقش self را دارد.
- recoverبازیابی
- تابع داخلی که درون یک تابع deferشده جلوی ادامهٔ panic را میگیرد و کنترل را برمیگرداند.
- runeرون
- نام دیگر نوع int32 که یک code point از Unicode را نگه میدارد. برای کار درست با متن غیر ASCII مثل فارسی لازم است.
- Python: در Python هر عنصر str یک code point است.
- sliceبرش
- نمایی پویا روی یک آرایهٔ پشتیبان، شامل اشارهگر، طول (length) و ظرفیت (capacity). پرکاربردترین ساختار دنبالهای در Go است.
- Python: نزدیک به list، ولی چند slice میتوانند یک آرایهٔ پشتیبان مشترک داشته باشند.
- structساختار
- نوع ترکیبی با فیلدهای نامدار. مقداری است، یعنی هنگام انتساب و ارسال به تابع کپی میشود.
- Python: شبیه dataclass، ولی بدون وراثت.
- toolchainزنجیرهٔ ابزار
- مجموعهٔ کامپایلر، linker و ابزارهای همراه دستور go. نسخهٔ آن در go.mod قفل میشود و در صورت نیاز خودکار دانلود میشود.
- worker poolاستخر کارگر
- الگویی که تعداد ثابتی goroutine کارها را از یک channel مشترک برمیدارند تا میزان همروندی محدود بماند.
- Python: شبیه ThreadPoolExecutor یا workerهای Celery.
- zero valueمقدار صفر
- مقدار پیشفرض هر نوع وقتی متغیر بدون مقداردهی تعریف میشود: 0 برای عددها، رشتهٔ خالی برای string، false برای bool و nil برای pointer، slice، map، channel، تابع و interface.
- Python: معادل ندارد؛ نام تعریفنشده NameError میدهد.