راهاندازی پروژه و ایجاد ماژول
قبل از نوشتن هر کدی، باید یک دایرکتوری snippetbox روی کامپیوتر خود ایجاد کنید تا به عنوان ‘خانه’ سطح بالا برای این پروژه عمل کند. تمام کد Go که در طول کتاب مینویسیم در اینجا قرار خواهد گرفت، همراه با سایر داراییهای خاص پروژه مانند قالبهای HTML و فایلهای CSS.
پس، اگر همراه هستید، ترمینال خود را باز کنید و یک دایرکتوری پروژه جدید به نام snippetbox در هر جایی از کامپیوتر خود ایجاد کنید. من دایرکتوری پروژه خود را در $HOME/code قرار میدهم، اما میتوانید مکان دیگری را انتخاب کنید اگر میخواهید.
$ mkdir -p $HOME/code/snippetbox
ایجاد یک ماژول
کار بعدی که باید انجام دهید تصمیمگیری در مورد یک مسیر ماژول (module path) برای پروژه شماست.
اگر هنوز با ماژولهای Go آشنا نیستید، میتوانید مسیر ماژول را اساساً به عنوان یک نام یا شناسه استاندارد برای پروژه خود در نظر بگیرید.
میتوانید تقریباً هر رشتهای را به عنوان مسیر ماژول خود انتخاب کنید، اما نکته مهمی که باید روی آن تمرکز کنید یکتایی است. برای جلوگیری از تداخل احتمالی import با پروژههای دیگران یا کتابخانه استاندارد در آینده، میخواهید یک مسیر ماژول انتخاب کنید که در سطح جهانی یکتا باشد و بعید است توسط چیز دیگری استفاده شود. در جامعه Go، یک قرارداد رایج این است که مسیرهای ماژول خود را بر اساس URL که مالک آن هستید پایهگذاری کنید.
در مورد من، یک مسیر ماژول واضح، مختصر و بعید به استفاده توسط چیز دیگری برای این پروژه snippetbox.alexedwards.net خواهد بود، و من این را در بقیه کتاب استفاده خواهم کرد. در صورت امکان، باید این را با چیزی که برای شما یکتا است جایگزین کنید.
پس از تصمیمگیری در مورد یک مسیر ماژول یکتا، کار بعدی که باید انجام دهید تبدیل دایرکتوری پروژه خود به یک ماژول است.
مطمئن شوید که در ریشه دایرکتوری پروژه خود هستید و سپس دستور go mod init را اجرا کنید — مسیر ماژول انتخاب شده خود را به عنوان پارامتر مانند این ارسال کنید:
$ cd $HOME/code/snippetbox $ go mod init snippetbox.alexedwards.net go: creating new go.mod: module snippetbox.alexedwards.net
در این مرحله دایرکتوری پروژه شما باید کمی شبیه به اسکرینشات زیر باشد. متوجه فایل go.mod که ایجاد شده است شدید؟
در حال حاضر چیز زیادی در این فایل وجود ندارد، و اگر آن را در ویرایشگر متن خود باز کنید باید شبیه به این باشد (اما ترجیحاً با مسیر ماژول یکتای خودتان به جای آن):
module snippetbox.alexedwards.net go 1.23.0
بعداً در کتاب با جزئیات بیشتر در مورد ماژولها صحبت خواهیم کرد، اما برای حالا کافی است بدانید که وقتی یک فایل go.mod معتبر در ریشه دایرکتوری پروژه شما وجود دارد، پروژه شما یک ماژول است. راهاندازی پروژه شما به عنوان یک ماژول مزایای متعددی دارد — از جمله آسانتر کردن مدیریت وابستگیهای شخص ثالث، جلوگیری از حملات زنجیره تأمین (supply-chain attacks)، و اطمینان از ساختهای قابل تکرار برنامه شما در آینده.
سلام دنیا!
قبل از ادامه، بیایید به سرعت بررسی کنیم که همه چیز به درستی راهاندازی شده است. بروید و یک main.go جدید در دایرکتوری پروژه خود ایجاد کنید که شامل کد زیر است:
$ touch main.go
package main import "fmt" func main() { fmt.Println("Hello world!") }
این فایل را ذخیره کنید، سپس از دستور go run . در ترمینال خود استفاده کنید تا کد در دایرکتوری فعلی کامپایل (compile) و اجرا شود. اگر همه چیز خوب باشد، خروجی زیر را خواهید دید:
$ go run . Hello world!
اطلاعات اضافی
مسیرهای ماژول برای بستههای قابل دانلود
اگر پروژهای ایجاد میکنید که میتواند توسط افراد و برنامههای دیگر دانلود و استفاده شود، پس بهتر است مسیر ماژول شما برابر با مکانی باشد که کد میتواند از آن دانلود شود.
برای مثال، اگر بسته شما در https://github.com/foo/bar میزبانی میشود، پس مسیر ماژول برای پروژه باید github.com/foo/bar باشد.