Let's Go مبانی ‹ راه‌اندازی پروژه و ایجاد ماژول
قبلی · فهرست · بعدی
فصل ۲.۱.

راه‌اندازی پروژه و ایجاد ماژول

قبل از نوشتن هر کدی، باید یک پوشه به نام snippetbox در کامپیوتر خود ایجاد کنید که به عنوان "خانه" اصلی این پروژه عمل کند. تمام کدهای Go که در طول این کتاب می‌نویسیم در اینجا قرار می‌گیرند، به همراه سایر فایل‌های پروژه مانند قالب‌های HTML (HTML Templates) و فایل‌های CSS.

پس، اگر همراه ما هستید، ترمینال را باز کنید و یک پوشه پروژه جدید به نام snippetbox در هر جایی از کامپیوتر خود ایجاد کنید. من پوشه پروژه خود را در $HOME/code قرار می‌دهم، اما شما می‌توانید مکان دیگری را انتخاب کنید.

$ mkdir -p $HOME/code/snippetbox

ایجاد ماژول (Creating a Module)

گام بعدی این است که یک مسیر ماژول (Module Path) برای پروژه خود انتخاب کنید.

اگر با ماژول‌های Go (Go Modules) آشنا نیستید، می‌توانید مسیر ماژول را به عنوان یک نام یا شناسه (Identifier) استاندارد برای پروژه خود در نظر بگیرید.

شما می‌توانید تقریباً هر رشته‌ای را به عنوان مسیر ماژول خود انتخاب کنید، اما نکته مهم تمرکز بر یکتا بودن (Uniqueness) است. برای جلوگیری از تداخل احتمالی با پروژه‌های دیگر افراد یا کتابخانه استاندارد در آینده، باید مسیر ماژولی را انتخاب کنید که در سطح جهانی یکتا باشد و احتمال استفاده مجدد آن توسط چیز دیگری کم باشد. در جامعه Go، یک قرارداد رایج این است که مسیرهای ماژول خود را بر اساس URL‌ای که مالک آن هستید پایه‌گذاری کنید.

در مورد من، یک مسیر ماژول واضح، مختصر و کم‌احتمال برای استفاده توسط چیز دیگری برای این پروژه می‌تواند snippetbox.letsgofa.net باشد، و من از این در ادامه کتاب استفاده خواهم کرد. اگر ممکن است، بهتر است این را با چیزی که برای شما یکتا است جایگزین کنید.

پس از تصمیم‌گیری در مورد مسیر ماژول یکتا، گام بعدی تبدیل پوشه پروژه شما به یک ماژول است.

مطمئن شوید که در ریشه پوشه پروژه خود هستید و سپس دستور go mod init را اجرا کنید - مسیر ماژول انتخاب شده خود را به عنوان پارامتر به این صورت وارد کنید:

$ cd $HOME/code/snippetbox
$ go mod init snippetbox.letsgofa.net
go: creating new go.mod: module snippetbox.letsgofa.net

در این مرحله، پوشه پروژه شما باید کمی شبیه تصویر زیر باشد. آیا متوجه فایل go.mod که ایجاد شده هستید؟

02.01-01.png

در حال حاضر چیز زیادی در این فایل وجود ندارد، و اگر آن را در ویرایشگر متن خود باز کنید، باید به این شکل باشد (اما ترجیحاً با مسیر ماژول یکتای خود شما):

File: go.mod
module snippetbox.letsgofa.net

go 1.23.0

ما در مورد ماژول‌ها در ادامه کتاب با جزئیات بیشتری صحبت خواهیم کرد، اما برای حالا کافی است بدانید که وقتی یک فایل go.mod معتبر در ریشه پوشه پروژه شما وجود دارد، پروژه شما یک ماژول است. راه‌اندازی پروژه شما به عنوان یک ماژول مزایای متعددی دارد - از جمله مدیریت آسان‌تر وابستگی‌های شخص ثالث (Third-party Dependencies)، اجتناب از حملات زنجیره تأمین (Supply Chain Attacks)، و اطمینان از ساخت‌های قابل تکرار (Reproducible Builds) برنامه شما در آینده.

سلام دنیا! (Hello World!)

قبل از ادامه، بیایید سریعاً بررسی کنیم که همه چیز درست تنظیم شده است. یک فایل main.go جدید در پوشه پروژه خود ایجاد کنید که شامل کد زیر باشد:

$ touch main.go
File: main.go
package main

import "fmt"

func main() {
    fmt.Println("Hello world!")
}

این فایل را ذخیره کنید، سپس از دستور go run . در ترمینال خود برای کامپایل (Compile) و اجرای کد در دایرکتوری فعلی استفاده کنید. اگر همه چیز درست باشد، خروجی زیر را خواهید دید:

$ go run .
Hello world!

اطلاعات تکمیلی

مسیرهای ماژول برای بسته‌های قابل دانلود (Module Paths for Downloadable Packages)

اگر در حال ایجاد پروژه‌ای هستید که می‌تواند توسط افراد و برنامه‌های دیگر دانلود و استفاده شود، پس خوب است که مسیر ماژول شما برابر با مکانی باشد که کد می‌تواند از آن دانلود شود.

برای مثال، اگر بسته شما در https://github.com/foo/bar میزبانی می‌شود، پس مسیر ماژول پروژه باید github.com/foo/bar باشد.

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

اصطلاح فارسی معادل انگلیسی توضیح
قالب‌های HTML HTML Templates فایل‌های HTML که شامل متغیرها و منطق برنامه‌نویسی هستند و به صورت پویا پر می‌شوند
ماژول Module واحد اصلی سازماندهی کد در Go که شامل مجموعه‌ای از پکیج‌های مرتبط است
مسیر ماژول Module Path شناسه یکتای یک ماژول که مسیر آن را در فضای نام‌های Go مشخص می‌کند
شناسه Identifier نام یکتایی که برای شناسایی یک عنصر در کد استفاده می‌شود
یکتا بودن Uniqueness خاصیت منحصر به فرد بودن یک شناسه یا مسیر در سیستم
وابستگی‌های شخص ثالث Third-party Dependencies کتابخانه‌ها و ابزارهایی که توسط توسعه‌دهندگان دیگر ایجاد شده‌اند و در پروژه استفاده می‌شوند
حملات زنجیره تأمین Supply Chain Attacks حملات امنیتی که از طریق وابستگی‌های نرم‌افزاری انجام می‌شوند
ساخت‌های قابل تکرار Reproducible Builds قابلیت ساخت مجدد دقیق یک برنامه با استفاده از همان کد و وابستگی‌ها
کامپایل Compile فرآیند تبدیل کد منبع به کد ماشین قابل اجرا