در بخش قبلی، شما ماژول greetings را ساختید. در این بخش، کدی خواهید نوشت تا تابع Hello را در ماژولی که همین چند لحظه پیش نوشتید، فراخوانی کند. شما کدی خواهید نوشت که میتوانید آن را به عنوان یک برنامه اجرایی اجرا کرده و کدهای موجود در ماژول greetings را فراخوانی کنید.
💡 نکته: این موضوع بخشی از یک آموزش چندبخشی است که با بخش «ساخت یک ماژول گو» آغاز میشود.
۱. یک دایرکتوری به نام hello برای سورسکد ماژول گو خود ایجاد کنید. اینجایی است که کد فراخواننده (Caller) خود را خواهید نوشت.
پس از ایجاد این دایرکتوری، باید هر دو دایرکتوری hello و greetings را در یک سطح از ساختار پوشهها داشته باشید، به این صورت:
<home>/
|-- greetings/
|-- hello/
برای مثال، اگر خط فرمان شما در دایرکتوری greetings قرار دارد، میتوانید از دستورات زیر استفاده کنید:
cd ..
mkdir hello
cd hello
۲. مدیریت (رهگیری) وابستگیها را برای کدی که میخواهید بنویسید فعال کنید.
برای فعالسازی رهگیری وابستگیها برای کد خود، دستور go mod init را اجرا کرده و نام ماژولی که کد شما در آن قرار خواهد گرفت را به آن بدهید.
برای اهداف این آموزش، از [example.com/hello](https://example.com/hello) برای مسیر ماژول استفاده کنید.
$ go mod init example.com/hello
go: creating new go.mod: module example.com/hello
۳. در ویرایشگر متن خود، درون دایرکتوری hello، فایلی ایجاد کنید تا کد خود را در آن بنویسید و نام آن را hello.go بگذارید.
۴. کدی بنویسید تا تابع Hello را فراخوانی کرده و سپس مقدار بازگشتی تابع را چاپ کند.
برای انجام این کار، کد زیر را در فایل hello.go بچسبانید (Paste کنید):
package main
import (
"fmt"
"example.com/greetings"
)
func main() {
// Get a greeting message and print it.
message := greetings.Hello("Gladys")
fmt.Println(message)
}
در این کد، شما:
-
یک پکیج
mainتعریف میکنید. در گو، کدی که به عنوان یک برنامه اجرایی اجرا میشود، باید درون یک پکیجmainقرار داشته باشد. -
دو پکیج را Import (فراخوانی) میکنید:
[example.com/greetings](https://example.com/greetings)و پکیجfmt. این کار به کد شما دسترسی به توابع موجود در آن پکیجها را میدهد. Import کردن[example.com/greetings](https://example.com/greetings)(پکیجی که در ماژولی که قبلاً ساختید قرار دارد) به شما دسترسی به تابعHelloرا میدهد. شما همچنینfmtرا Import میکنید که حاوی توابعی برای مدیریت متنهای ورودی و خروجی است (مانند چاپ متن در کنسول). -
با فراخوانی تابع
Helloاز پکیجgreetingsیک پیام خوشآمدگویی دریافت میکنید.
۵. ماژول [example.com/hello](https://example.com/hello) را ویرایش کنید تا از ماژول محلی [example.com/greetings](https://example.com/greetings) استفاده کند.
برای استفاده در محیط عملیاتی (Production)، شما ماژول [example.com/greetings](https://example.com/greetings) را از مخزن آن (با مسیر ماژولی که محل انتشار آن را نشان میدهد) منتشر میکنید، جایی که ابزارهای گو بتوانند آن را برای دانلود پیدا کنند. در حال حاضر، چون هنوز ماژول را منتشر نکردهاید، باید ماژول [example.com/hello](https://example.com/hello) را طوری تنظیم کنید که بتواند کد [example.com/greetings](https://example.com/greetings) را روی فایل سیستم محلی (Local file system) شما پیدا کند.
برای انجام این کار، از دستور go mod edit استفاده کنید تا ماژول [example.com/hello](https://example.com/hello) را ویرایش کرده و ابزارهای گو را از مسیر ماژول آن (جایی که ماژول وجود ندارد) به دایرکتوری محلی (جایی که ماژول قرار دارد) هدایت کنید.
از طریق خط فرمان درون دایرکتوری hello، دستور زیر را اجرا کنید:
$ go mod edit -replace example.com/greetings=../greetings
این دستور مشخص میکند که [example.com/greetings](https://example.com/greetings) برای پیدا کردن وابستگی باید با greetings/.. جایگزین شود. پس از اجرای دستور، فایل go.mod در دایرکتوری hello باید شامل یک دستورالعمل replace باشد:
module example.com/hello
go 1.16
replace example.com/greetings => ../greetings
۶. از طریق خط فرمان درون دایرکتوری hello، دستور go mod tidy را اجرا کنید تا وابستگیهای ماژول [example.com/hello](https://example.com/hello) همگامسازی شوند. این دستور مواردی را که کد به آنها نیاز دارد اما هنوز در ماژول رهگیری نشدهاند، اضافه میکند.
$ go mod tidy
go: found example.com/greetings in example.com/greetings v0.0.0-00010101000000-000000000000
پس از اتمام دستور، فایل go.mod مربوط به ماژول [example.com/hello](https://example.com/hello) باید به این صورت باشد:
module example.com/hello
go 1.16
replace example.com/greetings => ../greetings
require example.com/greetings v0.0.0-00010101000000-000000000000
دستور کدهای محلی را در دایرکتوری greetings پیدا کرد و سپس یک دستورالعمل require اضافه کرد تا مشخص کند که [example.com/hello](https://example.com/hello) به [example.com/greetings](https://example.com/greetings) نیاز دارد. شما این وابستگی را زمانی ایجاد کردید که پکیج greetings را در فایل hello.go فراخوانی (Import) کردید.
عددی که بعد از مسیر ماژول میآید یک شماره شبهنسخه (Pseudo-version number) است -- یک شماره تولیدشده که به جای شماره نسخه معنایی (Semantic version number) استفاده میشود (زیرا ماژول هنوز چنین نسخهای ندارد).
برای ارجاع به یک ماژول منتشرشده، یک فایل go.mod معمولاً دستورالعمل replace را حذف کرده و از یک دستورالعمل require به همراه یک شماره نسخه برچسبگذاریشده (Tagged version) در انتها استفاده میکند:
require example.com/greetings v1.1.0
برای اطلاعات بیشتر درباره شماره نسخهها، بخش شمارهگذاری نسخه ماژول (Module version numbering) را ببینید.
۷. در خط فرمان درون دایرکتوری hello، کد خود را اجرا کنید تا از کارکرد صحیح آن مطمئن شوید.
$ go run .
Hi, Gladys. Welcome!
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: منبع مستندات