4.3 آموزش کار با go mod

4.3 آموزش کار با go mod

از نسخه 1.11 زبان گو مفهوم جدیدی برای مدیریت وابستگی ها آمد و جایگزین GOPATH شد. ماژول های گو این امکان را می دهد خیلی راحت ماژول های مختلف را به پروژه اضافه کنید و نسخه های هر ماژول را مدیریت کنید. با استفاده از ماژول گو برنامه نویسان گو محدود به GOPATH برای توسعه نخواهد بود و در جایی می توانند پروژه خود را ایجاد و ماژول های پروژه را به آسانی مدیریت کند.

در زیر یک نمونه از محتوای داخل فایل go.mod را قرار دادیم :

1module github.com/user/repo
2
3go 1.20
4
5require (
6    github.com/sirupsen/logrus v1.8.1
7    github.com/spf13/cobra v1.2.1
8)
  1. در خط اول نام ماژول می باشد که داخل کد هرجایی که import انجام می دهید نام ماژول اولش قرار می گیرد مانند :
1package cmd
2
3import "github.com/user/repo/internal/app"

علت اینکه نام ماژول را آدرس یک مخزن گیت را قرار می دهیم جهت قابل استفاده بودن ماژول می باشد که خیلی ساده بتوانید به پروژه های دیگر ماژولی که نوشتید را اضافه کنید.

  1. در خط سوم نسخه زبان گو وجود دارد که شما هر نسخه ای را که تعیین میکنید فقط از ویژگی های همان نسخه به قبل را می توانید استفاده کنید.

مثلا شما اگر نسخه 1.17 را گذاشته باشید و قصد داشته باشید از ویژگی جنریک که مربوط به نسخه 1.18 است استفاده کنید, هنگام کامپایل خطا می خورید.

پس توجه کنید در اینجا سعی کنید از نسخه متناسب با نیاز خود را تعیین کنید هرچند هنگام ایجاد فایل go.mod زبان گو پیش فرض نسخه ای که نصب کرده اید را قرار می دهد.

  1. در قسمت require ماژول های خارجی قرار میگیرد که داخل پروژه استفاده کردید. نظیر :
  • github.com/sirupsen/logrus
  • github.com/spf13/cobra

به همراه نسخه مشخص اون ماژول.

اما ماژول گو یک خوبی دارد خیلی راحت می توانید نسخه ماژول ها را به آسانی مدیریت کنید و ارتقا دهید.

برای مدیریت ماژول های گو یک کامند داریم به نام mod که یک سری دستورات کمکی برای مدیریت ماژول ها دارد که در ادامه آموزش می دهیم :

 1$ go mod       
 2Go mod provides access to operations on modules.
 3
 4Note that support for modules is built into all the go commands,
 5not just 'go mod'. For example, day-to-day adding, removing, upgrading,
 6and downgrading of dependencies should be done using 'go get'.
 7See 'go help modules' for an overview of module functionality.
 8
 9Usage:
10
11	go mod <command> [arguments]
12
13The commands are:
14
15	download    download modules to local cache
16	edit        edit go.mod from tools or scripts
17	graph       print module requirement graph
18	init        initialize new module in current directory
19	tidy        add missing and remove unused modules
20	vendor      make vendored copy of dependencies
21	verify      verify dependencies have expected content
22	why         explain why packages or modules are needed
23
24Use "go help mod <command>" for more information about a command.

برای اینکه اطلاعات بیشتری در خصوص کامند های go mod کسب کنید کافیه go help mod را قبل از کامند بزارید تا توضیحات بیشتری را ببینید.

4.3.1 ایجاد go.mod #

برای ایجاد فایل go.mod کافیه دستور زیر را در ریشه پروژه بزنید :

1$ go mod init github.com/user/repo

پس از اینکه دستور فوق را زدید یک فایل go.mod ایجاد می شود داخلش محتوای زیر بدون ماژول خارجی می باشد :

1module github.com/user/repo
2
3go 1.20

4.3.2 افزودن ماژول خارجی به go.mod #

برای افزودن یک ماژول خارجی به پروژه کافیه دستور زیر را در محل فایل go.mod بزنید :

1$ go get github.com/spf13/cobra

زمانیکه دستور فوق را می زنید آخرین نسخه ماژول github.com/spf13/cobra را دریافت و به پروژه اضافه می کند.

دقت کنید وقتی ماژول جدیدی را دریافت می کنید یک فایل go.sum در کنار فایل go.mod ایجاد می شود که داخل این فایل اطلاعات ماژول های خارجی به همراه ساب ماژول ها قرار دارد. که برای اطمینان از یکپارچگی و امنیت وابستگی های مورد استفاده در پروژه Go طراحی شده است. این فایل بصورت خودکار ایجاد و بروز می شود پس بهتر است تغییری در این فایل ندهید.

4.3.3 افزودن ماژول خارجی با تعیین نسخه #

با دستور زیر می توانید یک ماژول خارجی با تعیین نسخه به پروژه خود اضافه کنید :

1$ go get github.com/spf13/cobra@v1.8.1

زمانیکه دستور فوق را می زنید نسخه v1.8.1 ماژول github.com/spf13/cobra را دریافت خواهید کرد.

4.3.4 آپدیت یک ماژول خارجی به آخرین نسخه #

برای آپدیت یک ماژول خارجی به آخرین نسخه کافیه دستور زیر را بزنید :

1$ go get -u github.com/spf13/cobra

در دستور فوق ما سوییچ u- را اضافه کردیم تا آخرین نسخه ماژول github.com/spf13/cobra به پروژه اضافه و جایگزین نسخه های قدیمی شود.

4.3.5 دستور go mod tidy #

یک کامند پر کاربرد به نام tidy داریم که هر زمانی که اجرا می کنید کدهایی که در محل فایل go.mod قرار دارد بررسی می کند و ماژول های ایمپورت شده را به پروژه اضافه می کند و در صورتیکه شما ماژولی را حذف کردید و به هیچ عنوان در پروژه خود استفاده نکردید را از go.mod حذف می کند.

1$ go mod tidy

اگر ماژول خارجی را استفاده کرده باشید در کدهای خود و هنوز به فایل go.mod اضافه نکرده باشید کامند tidy بصورت خودکار آخرین نسخه ماژول خارجی را دریافت و به فایل go.mod اضافه میکند.

4.3.6 دستور go mod download #

با استفاده از این کامند می توانید ماژول های خارجی داخل فایل go.mod را دریافت کرده و در لوکال خود کش کنید. تا بعدا از آن ماژول استفاده کنید.

1$ go mod download

زمانیکه این دستور را بزنید شروع به دانلود ماژول های خارجی می شود و در لوکال شما این ماژول ها ذخیره می شود.

برای اینکه بتوانید ببینید وضعیت دانلود تا چه پیشرفته است می توانید سوییچ x- را اضافه کنید تا به شما وضعیت ماژول های در حال دریافت را نمایش دهد :

1$ go mod download -x

4.3.7 دستور go mod verify #

با این دستور شما می توانید وضعیت ماژول ها را بررسی کنید که مورد تایید هست یا نه.

1$ go mod verify