4.17 آموزش stringer

4.17 آموزش stringer

Stringer به طور کلی برای پیاده‌سازی مفهوم شمارشی (enumeration) استفاده می‌شود در حالی که از برنامه‌نویسی ثابت رشته‌های مقدار استفاده نمی‌کند. شمارشی یا enum زمانی استفاده می‌شود که می‌خواهید مجموعه‌ای متناهی و ثابتی از مقادیر یک نوع داده‌ای را تعریف کنید. به عنوان مثال، انواع غذا در منو (پیش غذا، اصلی، دسر)، انواع پوکمون (گیاهی، آبی، آتشی، و غیره).

بنابراین، زمانی که می‌خواهیم از این مجموعه‌های تعریف شده استفاده کنیم، باید از برنامه‌نویسی ثابت رشته‌های مقدار استفاده کنیم زیرا ممکن است به خطاهای انسانی مانند اشتباهات املایی منجر شود. اگر از Stringer استفاده کنیم، مقادیر را یکبار تولید می‌کنیم و مطمئن می‌شویم که هیچ خطایی ایجاد نمی‌شود. پس از آن، می‌توانیم از آن‌ها بدون نگرانی از خطاهای انسانی استفاده کنیم.

4.17.1 پیاده سازی متد String برای آبجکت ها #

شما می توانید برای هر یک از آبجکت ها متد String را پیاده سازی کنید و یک خروجی استرینگ در خصوص مقادیر آبجکت داشته باشید.

به مثال کاربردی زیر توجه کنید:

package main

import "fmt"

type Age int

const (
	CHILDERN Age = iota
	ADOLESCENTS
	ADULTS
)

func (a Age) String() string {
	switch a {
	case CHILDERN:
		return "childern"
	case ADOLESCENTS:
		return "adolescents"
	case ADULTS:
		return "adults"
	default:
		return ""
	}
}

func main() {
	fmt.Println(CHILDERN.String())
}

در مثال فوق ما یک تایپ Age تعریف کردیم و سپس یکسری enum با همان تایپ قرار دادیم پس از آن متد String را پیاده سازی کردیم که بتوانیم رشته هرکدام از enum ها را بگیریم.

4.17.2 استفاده از ابزار stringer #

شما با استفاده از ابزار stringer می توانید به راحتی برای enum های خود رشته را بصورت خودکار ایجاد کنید.

برای نصب این ابزار در ابتدا باید دستور زیر را بزنید تا داخل go bin نصب شود:

$ go install golang.org/x/tools/cmd/stringer@latest

اکنون بخواهیم با استفاده از ابزار stringer متد استرینگ جنریت کنیم کافیه مثال زیر توجه کنید:

package main

import "fmt"

//go:generate stringer -type=Age

type Age int

const (
	CHILDERN Age = iota
	ADOLESCENTS
	ADULTS
)

func main() {
	fmt.Println(CHILDERN.String())
}

در کد فوق ما یک directive comment اضافه کردیم حال کافیه با استفاده از دستور go generate متد استرینگ تایپ را جنریت کنیم.

go generate ./...