در این بخش، کد خود را طوری تغییر میدهید که به جای بازگرداندن یک پیام خوشآمد ثابت، یکی از چند پیام از پیش تعریفشده را به صورت تصادفی بازگرداند.
💡 نکته: این موضوع بخشی از یک آموزش چندبخشی است که با بخش «ساخت یک ماژول گو» آغاز میشود.
برای این کار از یک اسلایس (Slice) در گو استفاده خواهید کرد. اسلایس شبیه به آرایه است، با این تفاوت که اندازه آن با اضافه و کم شدن آیتمها به صورت پویا (Dynamic) تغییر میکند. اسلایس یکی از کاربردیترین انواع داده (Types) در زبان گو است.
شما یک اسلایس کوچک شامل سه پیام خوشآمدگویی ایجاد میکنید، سپس کد را طوری تنظیم میکنید که یکی از این پیامها را به صورت تصادفی بازگرداند. برای اطلاعات بیشتر درباره اسلایسها، مقاله Go slices را در وبلاگ رسمی گو ببینید.
۱. در فایل greetings/greetings.go کد خود را تغییر دهید تا شبیه به کد زیر شود:
package greetings
import (
"errors"
"fmt"
"math/rand"
)
// Hello returns a greeting for the named person.
func Hello(name string) (string, error) {
// If no name was given, return an error with a message.
if name == "" {
return name, errors.New("empty name")
}
// Create a message using a random format.
message := fmt.Sprintf(randomFormat(), name)
return message, nil
}
// randomFormat returns one of a set of greeting messages. The returned
// message is selected at random.
func randomFormat() string {
// A slice of message formats.
formats := []string{
"Hi, %v. Welcome!",
"Great to see you, %v!",
"Hail, %v! Well met!",
}
// Return a randomly selected message format by specifying
// a random index for the slice of formats.
return formats[rand.Intn(len(formats))]
}
در این کد، شما:
-
یک تابع
randomFormatاضافه میکنید که فرمتی را برای پیام خوشآمدگویی به صورت تصادفی بازمیگرداند. دقت کنید که نامrandomFormatبا حرف کوچک انگلیسی شروع میشود؛ این کار باعث میشود که این تابع تنها برای کدهای داخل همین پکیج قابل دسترسی باشد (به عبارت دیگر، تصدیر نشده / Exported نیست). -
در تابع
randomFormat، یک اسلایس به نامformatsبا سه فرمت پیام تعریف میکنید. هنگام تعریف اسلایس، اندازه آن را در کروچهها وارد نمیکنید:[]string. این به گو میگوید که اندازه آرایه زیرینِ این اسلایس میتواند به صورت پویا تغییر کند. -
از پکیج
math/randبرای تولید یک عدد تصادفی جهت انتخاب یک آیتم از اسلایس استفاده میکنید. -
در تابع
Hello، تابعrandomFormatرا فراخوانی میکنید تا فرمتی برای پیام بازگشتی دریافت کند، سپس از آن فرمت و مقدارnameبرای ساخت پیام استفاده میکنید. -
پیام (یا خطا) را مانند قبل بازمیگردانید.
۲. در فایل hello/hello.go کد خود را تغییر دهید تا شبیه به کد زیر شود:
در این فایل فقط نام Gladys (یا اگر دوست دارید یک نام دیگر) را به عنوان آرگومان ورودی به فراخوانی تابع Hello اضافه میکنید.
package main
import (
"fmt"
"log"
"example.com/greetings"
)
func main() {
// Set properties of the predefined Logger, including
// the log entry prefix and a flag to disable printing
// the time, source file, and line number.
log.SetPrefix("greetings: ")
log.SetFlags(0)
// Request a greeting message.
message, err := greetings.Hello("Gladys")
// If an error was returned, print it to the console and
// exit the program.
if err != nil {
log.Fatal(err)
}
// If no error was returned, print the returned message
// to the console.
fmt.Println(message)
}
۳. در خط فرمان درون دایرکتوری hello، فایل hello.go را اجرا کنید تا از کارکرد صحیح کد مطمئن شوید.
آن را چندین بار اجرا کنید و دقت کنید که پیام خوشآمد تغییر میکند:
$ go run .
Great to see you, Gladys!
$ go run .
Hi, Gladys. Welcome!
$ go run .
Hail, Gladys! Well met!
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: منبع مستندات