Let's Go پاسخ‌های مبتنی بر پایگاه داده › ماژول‌ها و ساخت‌های قابل تکرار (Modules and Reproducible Builds)
قبلی · فهرست · بعدی
فصل ۴.۳.

ماژول‌ها و ساخت‌های قابل تکرار (Modules and Reproducible Builds)

حالا که درایور MySQL نصب شده است، بیایید نگاهی به فایل go.mod بیندازیم (که در همان ابتدای کتاب آن را ایجاد کردیم). شما باید یک بلوک require (نیازمندی‌ها) با دو خط حاوی مسیر و شماره نسخه دقیق پکیج‌هایی که دانلود کردید را ببینید:

File: go.mod
module snippetbox.letsgofa.net

go 1.23.0

require (
    filippo.io/edwards25519 v1.1.0 // indirect
    github.com/go-sql-driver/mysql v1.8.1 // indirect
)

این خطوط در go.mod اساساً به دستور Go می‌گویند که دقیقاً از کدام نسخه پکیج (Package Version) باید هنگام اجرای دستوری مانند go run، go test یا go build از دایرکتوری پروژه شما استفاده شود.

این باعث می‌شود که داشتن چندین پروژه روی یک ماشین که از نسخه‌های مختلف یک پکیج (Different Package Versions) استفاده می‌کنند، آسان شود. برای مثال، این پروژه از نسخه v1.8.1 درایور MySQL استفاده می‌کند، اما شما می‌توانید کد دیگری روی کامپیوتر خود داشته باشید که از نسخه v1.5.0 استفاده می‌کند و این کاملاً قابل قبول است.

همچنین خواهید دید که یک فایل جدید به نام go.sum در ریشه دایرکتوری پروژه شما ایجاد شده است.

04.03-01.png

این فایل go.sum شامل مجموع‌های رمزنگاری شده است که محتوای پکیج‌های مورد نیاز را نشان می‌دهد. اگر آن را باز کنید باید چیزی شبیه به این را ببینید:

File: go.sum
filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=

فایل go.sum برای ویرایش دستی طراحی نشده است و معمولاً نیازی به باز کردن آن نخواهید داشت. اما دو عملکرد مفید دارد:

پس، به طور خلاصه:

و این موارد در کنار هم باعث می‌شود که ایجاد ساخت‌های قابل تکرار از برنامه‌های Go شما بسیار آسان‌تر شود.


اطلاعات تکمیلی (Additional Information)

ارتقای پکیج‌ها (Upgrading Packages)

پس از اینکه یک پکیج دانلود شد و به فایل go.mod شما اضافه شد، پکیج و نسخه آن 'ثابت' می‌شوند. اما دلایل زیادی وجود دارد که ممکن است بخواهید در آینده از نسخه جدیدتری از یک پکیج استفاده کنید.

برای ارتقا به آخرین نسخه جزئی یا اصلاح موجود یک پکیج، می‌توانید به سادگی go get را با پرچم -u اجرا کنید:

$ go get -u github.com/foo/bar

یا به طور متناوب، اگر می‌خواهید به یک نسخه خاص ارتقا پیدا کنید، باید همان دستور را با پسوند @version مناسب اجرا کنید. برای مثال:

$ go get -u github.com/foo/bar@v2.0.0

حذف پکیج‌های استفاده نشده (Removing Unused Packages)

گاهی اوقات ممکن است یک پکیج را با go get نصب کنید و بعداً متوجه شوید که دیگر به آن نیاز ندارید. در این صورت دو انتخاب دارید.

می‌توانید یا go get را اجرا کنید و مسیر پکیج را با @none پسوند دهید:

$ go get github.com/foo/bar@none

یا اگر تمام ارجاعات به پکیج را در کد خود حذف کرده‌اید، می‌توانید go mod tidy را اجرا کنید، که به طور خودکار هر پکیج استفاده نشده را از فایل‌های go.mod و go.sum شما حذف می‌کند.

$ go mod tidy

واژه‌نامه اصطلاحات فنی

اصطلاح فارسی معادل انگلیسی توضیح
ماژول‌ها Modules واحدهای مستقل کد در Go که شامل مجموعه‌ای از پکیج‌های مرتبط هستند
ساخت‌های قابل تکرار Reproducible Builds فرآیند ساخت نرم‌افزار که همیشه خروجی یکسانی تولید می‌کند
نیازمندی‌ها Requirements پکیج‌ها و وابستگی‌هایی که برای اجرای برنامه مورد نیاز هستند
نسخه پکیج Package Version شماره نسخه مشخص یک پکیج که نشان‌دهنده تغییرات و ویژگی‌های آن است
وابستگی‌های غیرمستقیم Indirect Dependencies پکیج‌هایی که مستقیماً در کد استفاده نمی‌شوند اما توسط سایر وابستگی‌ها مورد نیاز هستند
مجموع رمزنگاری شده Cryptographic Checksum مقدار هش که برای تأیید یکپارچگی محتوای پکیج استفاده می‌شود
ارتقای پکیج‌ها Upgrading Packages فرآیند به‌روزرسانی پکیج‌ها به نسخه‌های جدیدتر
پکیج‌های استفاده نشده Unused Packages پکیج‌هایی که در پروژه نصب شده‌اند اما دیگر مورد استفاده قرار نمی‌گیرند