Skip to content

Commit

Permalink
add: cheat formatting string
Browse files Browse the repository at this point in the history
  • Loading branch information
Ja7ad committed Jan 7, 2023
1 parent fea1109 commit df52c92
Show file tree
Hide file tree
Showing 2 changed files with 131 additions and 1 deletion.
2 changes: 1 addition & 1 deletion app/desktop/content
Submodule content updated 126 files
130 changes: 130 additions & 0 deletions content/chapter 1/1.15-formatting.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
---
title: '1.15 قالب بندی رشته ها (string formatting)'
slug: go-string-formatting
weight: 1015
---

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

## 1.15.1 قالب بندی با تابع Printf و Sprintf

زمانیکه شما از تابع Printf یا Sprintf استفاده می کنید می توانید رشته خروجی را با استفاده از پارامترهای بعد از رشته قالب بندی کنید و در نهایت بصورت یک رشته نمایش دهید.

```go
fmt.Printf("{{Verb}}", value1, value2, value3, ..., valueN)
```

```go
fmt.Sprintf("{{Verb}}", value1, value2, value3, ..., valueN)
```

{{< hint info >}}
توجه کنید هر دو تابع فوق خیلی کاربردی و پر استفاده هستند ولی این ۲ تابع کارکردشان مشترک ولی خروجی متفاوت می باشد.

به عنوان مثال :

- شما با استفاده از Printf می توانید یک رشته را قالب بندی کنید و در نهایت به عنوان خروجی چاپ کنید.
- ولی با استفاده از Sprintf می توانید یک رشته را قالب بندی کنید و در نهایت می توانید مقدار خروجی را داخل یک متغیر قرار دهید.

```go
x := fmt.Sprintf("age %s is %d years", "Javad", 30)
```

{{< /hint >}}

### 1.15.1.1 قالب بندی یک slice

| Verb | `fmt.Printf("{{Verb}}", []int64{0, 1})` خروجی | توضیحات |
|---|----------|-------------|
| %v | `[0 1]` | فرمت پیش فرض |
| %#v | `[]int64{0, 1}` | قالب بندی کد گو |
| %T | `[]int64` | تایپ مقدار |


{{< hint info >}}
توجه کنید `v%` یکی از پرکاربرد ترین Verb ها می باشد که برای مواقعی که قصد دارید یک مقدار را داخل رشته بزارید ولی از تایپ اون مقدار خبر ندارید می توانید `v%` کنید که هر نوع داده ای را قرار می دهد.
{{< /hint >}}


### 1.15.1.2 قالب بندی اعداد صحیح

| Verb | `fmt.Printf("{{Verb}}", 15)` خروجی | توضیحات |
|---|----------|-------------|
| %d | `15` | عدد پایه ۱۰ |
| %+d | `+15` | نمایش + در کنار عدد |
| %4d | ␣␣`15` | ۴ کارکتر با فاصله از راست |
| %-4d | `15`␣␣ | ۴ کارکتر با فاصله از چپ |
| %04d | `0015` | نمایش عدد با پیشوند صفر |
| %b | `1111` | عدد با پایه باینری |
| %o | `17` | عدد با پایه ۸ اکتال |
| %x | `f` | عدد با پایه ۱۶ هگز حروف کوچک |
| %X | `F` | عدد با پایه ۱۶ هگز حروف بزرگ |
| %#x | `0xf` | عدد با پایه ۱۶ هگز به همراه 0x |


### 1.15.1.3 قالب بندی اعداد اعشاری

| Verb | `fmt.Printf("{{Verb}}", 123.456)` خروجی | توضیحات |
|---|----------|-------------|
| %e | `1.234560e+02` | نمایش بصورت نماد عملی |
| %f | `123.456000` | نقطه اعشاری، بدون نما. دقت پیش فرض 6 است |
| %.2f | `123.46` | عرض پیش فرض، دقت 2 رقم بعد از نقطه اعشار |
| %8.2f | ␣␣`123.46` | عرض 8 کاراکتر، دقت 2 رقم بعد از نقطه اعشار. کاراکتر پیش‌فرض padding space است |
| %08.2f | `00123.46` | عرض 8 کاراکتر، دقت 2 رقم بعد از نقطه اعشار. لایه سمت چپ با نویسه مشخص شده (اینجا، 0) |
| %g | `123.456` | نما در صورت نیاز، فقط ارقام ضروری |


### 1.15.1.4 قالب بندی کارکترها

| Verb | `fmt.Printf("{{Verb}}", 'A')` خروجی | توضیحات |
|---|----------|-------------|
| %c | `A` | کارکتر |
| %q | `'A'` | کارکتر به همراه تک کوتیشن |
| %U | `U+0041` | یونیکد |
| %#U | `U+0041 'A'` | یونیکد به همراه کارکتر |



### 1.15.1.5 قالب بندی رشته (string) و slice بایت

| Verb | `fmt.Printf("{{Verb}}", "gophers")` خروجی | توضیحات |
|---|----------|-------------|
| %s | `gophers` | رشته ساده |
| %8s | ␣␣`gophers` | با ۸ پدینگ راست چین شده |
| %-8s | `gophers`␣␣ | با ۸ پدینگ چپ چین شده |
| %q |`"gophers"` | رشته به همراه دابل کوتیشن |
| %x | `676f7068657273` | خروجی هگز مقدار |
| % x | `67 6f 70 68 65 72 73` | خروجی هگز مقدار با فاصله |


### 1.15.1.6 قالب بندی بولین

| Verb | `fmt.Printf("{{Verb}}", true)` خروجی | توضیحات |
|---|----------|-------------|
| %t | `true` | نمایش مقدار بولین در رشته |



### 1.15.1.6 قالب بندی اشاره گر (pointer)

| Verb | `fmt.Printf("{{Verb}}", new(int))` خروجی | توضیحات |
|---|----------|-------------|
| %p | `0xc0000b2000` | نمایش آدرس حافظه با پایه ۱۶ به همراه 0x |


## 1.15.2 مقادیر خاص در رشته

همانطور که گفتیم زبان گو یکسری کارکترهای خاص دارد که باعث تغییراتی در خروجی رشته خواهد شد و این کارکترهای خاص بین همه زبان ها مشترک است.


| Verb | توضیحات |
|---|----------|
| \a | U+0007 هشدار یا زنگ |
| \b | U+0008 بک اسپیس backspace |
| \\\ | U+005c بک اسلش backslash |
| \t | U+0009 تب بصورت افقی |
| \n | U+000A خط جدید |
| \f | U+000C حالت فرم |
| \r | U+000D حالت برگشت |
| \v | U+000b تب بصورت عمودی |
| `%%` | نمایش درصد برای حالت های خاص نظیر `fmt.Printf("%05.2f%%", math.Pi)` |

0 comments on commit df52c92

Please sign in to comment.