Skip to content

Commit

Permalink
add: section stringer #151
Browse files Browse the repository at this point in the history
  • Loading branch information
Ja7ad committed May 27, 2023
1 parent 15ef277 commit c34f6a0
Showing 1 changed file with 86 additions and 1 deletion.
87 changes: 86 additions & 1 deletion content/chapter 4/4.17-stringer.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,89 @@ slug: go-stringer
weight: 7017
---

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

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

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

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

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

```go
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())
}
```

```shell
$ go run main.go
childern
```

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


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

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

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

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

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

```go
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 ./...
```

0 comments on commit c34f6a0

Please sign in to comment.