۹ آذر ۱۴۰۴
پکیج و ماژول هردو روش هایی برای دسته بندی و استفاده ی مجدد از کدها هستند. در اینجا با پکیج و ماژول آشنا میشویم و یادمیگیریم چطور از پکیج و ماژول هایی که دیگران توسعه داده اند درون پروژه خود استفاده کنیم.
در گولنگ هر فایلی که شامل کدهای Go است حتماً با یک package شروع میشود. با استفاده از کلمه کلیدی package به همراه یک نام میتوانیم نام پکیج را مشخص کنیم.
در گولنگ پکیج ها در سطح دایرکتوری تعریف میشوند. بدین معنی که یک دایرکتوری (پوشه یا فولدر) دارای یک نام است که با استفاده از آن نام میتوان به محتوای داخل آن پکیج دسترسی پیدا کرد. تمامی فایل هایی که درون دایرکتوری (پوشه یا همان فولدر) یکسانی قرار دارند باید دارای نام پکیج یکسانی باشند. بهتر است که همیشه نام پکیج با نام دایرکتوری (پوشه یا همان فولدر) که فایل های پکیج درون آن قرار دارند یکسان باشد.
پکیج ها به ما کمک میکنند تا کدها را به قسمت های کوچکتر بشکنیم و این قسمت ها را چندین بار در جاهایی که نیاز داریم استفاده کنیم. به عنوان مثال از پکیج fmt برای چاپ و قالب بدی داده ها استفاده میکنیم.
برای استفاده از یک پکیج میتوانیم با استفاده از کلمه کلیدی import پکیج را به کد فعلی اضافه کنیم. در مثال بالا پکیج fmt را به پکیج greeting اضافه کردیم و سپس از آن درون تابع Hello استفاده کردیم.
در گولنگ, توابع, دیتا تایپ ها و متغیرهایی که نام آنها با حرف بزرگ شروع شود (Capital case) در خارج از پکیجی که در آن تعریف شده اند قابل استفاده هستند. در مثال قبل تابع Printf را از پکیج fmt مورد استفاده قرار دادیم. نام این تابع با حرف بزرگ P شروع میشود بنابراین درون پکیج های دیگر و قابل دسترسی خواهد بود.
دو پکیج خاص در گولنگ وجود دارند:
main
internal
mainهر پروژهای که قرار است خروجیاش یک فایل اجرایی باشد (binary) باید دارای یک پکیج با نام main باشد و درون این پکیج یک تابع با نام main تعریف شده باشد. برنامه های گولنگی با اجرای تابع main از پکیج main شروع به کار میکنند.
پکیج main را نمیتوان در پکیج های دیگر import کرد. اگر برنامه ای دارای پکیج main نباشد نمیتواند دارای فایل اجرایی باشد.
فرض کنید مانند مثال بالا دو فایل main داریم, بنابراین میتوانیم پروژه را یکبار به ازای هرکدام از این فایلها کامپایل کنیم و در نتیجه دو فایل اجرایی داشته باشیم.
internalپکیج internal یک مکانیزم محدودیت دسترسی است تا بعضی پکیجها به صورت محدود قابل استفاده باشند. به بیان دیگر پکیجهای داخل دایرکتوری internal فقط توسط پکیج هایی قابل import هستند که در همان پوشهی والدِ مستقیم internal و یا در پوشه های زیرشاخه ی آن قرار داشته باشند.
در مثال بالا دستورات درون پکیج crypto تنها درون پکیج هایی که درون پوشه business تعریف شده باشند قابل import هستند. به عنوان مثال میتوان پکیج crypto را درون فایل http.go استفاده کرد اما نمیتوان پکیج crypto را درون server/web.go استفاده کرد.
هرکجا که میخواهید نتوان از پکیج ها در بیرون از پکیج والد آن استفاده کرد میتوانید پکیج ها را مانند مثال بالا درون پوشه internal قرار دهید.
در گولنگ، پکیج (Package) و ماژول (Module) دو مفهوم مهم هستند.
go.mod است که نسخه، وابستگیها و مسیر پروژه را تعریف میکند.با استفاده از دستور go mod init به همراه یک نام, میتوان یک ماژول ایجاد کرد:
با اجرای این دستور دو فایل با نام های go.mod و go.sum ایجاد میشوند. به صورت خلاصه:
فایل go.mod نام ماژول, ورژن گولنگ مورد نیاز و همچنین وابستگیهای پروژه را مشخص میکند.
فایل go.sum شامل مقادیر هش (checksum) برای هر وابستگی و همچنین هش فایل go.mod مربوط به آن وابستگی است. هدف اصلی این فایل این است که اجراها و کامپایل های برنامه قابل تکرار و امن باشند. هر بار که یک وابستگی را دانلود میکنیم، گولنگ هش آن را با مقدار داخل go.sum مقایسه میکند تا مطمئن شود محتوای دانلودشده همان چیزی است که قبلاً تایید شده.
با استفاده از دستور go get میتوان یک ماژول را به عنوان وابستگی نصب کرد. به عنوان مثال با اجرای دستوری زیر میتوان ماژول uuid را درون پروژه نصب کرد:
و سپس میتوان پکیج های این ماژول را import و از آن استفاده کرد:
در صورتی که نمیخواهید از یک وابستگی استفاده کنید ابتدا کدهایی که از آن وابستگی استفاده میکنند را از پروژه خود حذف کنید و سپس دستور go mod tidy را اجرا کنید تا آن وابستگی نیز از درون go.mod و go.sum حذف شود.
قسمت قبل: کنترل خطاها (error) | گولنگ به زبان ساده
قسمت بعد: به زودی…