-
-
Notifications
You must be signed in to change notification settings - Fork 95
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
131 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)` | |