You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/_index.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -195,7 +195,7 @@ a {
195
195
این کتاب برای کسانی که تازه میخواهند زبان گو را یادبگیرند یا اینکه افراد باتجربه در زبان گو هستند، مناسب میباشد و همچنین اگر قصد دارید زبان گو را به عنوان استک جدید شروع کنید، این کتاب یک راهنمای کلی برای یادگیری زبان گو خواهد بود.
196
196
197
197
{{< hint info >}}
198
-
این کتاب تقدیم میشود به [#جادی_میرمیرانی](https://jadi.net/) که فعال حوزهٔ تکنولوژیهای جدید و جامعهٔ نرمافزار آزاد و متنباز است.
198
+
این کتاب تقدیم میشود به [#جادی_میرمیرانی](https://jadi.net/)، فعال در حوزهٔ فناوریهای نوین و جامعهٔ نرمافزارهای آزاد و متنباز. همچنین یادی کنیم از [مرحوم صابر راستیکردار](https://rastikerdar.github.io/vazirmatn/fa)، طراح فونت وزیر، که از اعضای فعال جامعهٔ نرمافزارهای آزاد و متنباز بود.
Copy file name to clipboardExpand all lines: content/chapter 4/4.24-tracing.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,7 @@
1
1
---
2
2
title: 4.24 آموزش tracing
3
3
slug: tracing
4
-
weight: 7023
4
+
weight: 7028
5
5
---
6
6
7
7
در این فصل، این مورد را یاد خواهیم گرفت که چگونه یک برنامه در حال اجرا را ردیابی کنیم و آن را با ابزار ردیابی مشاهده کنیم. در این حالت با استفاده از کتابخانه استاندارد، یک ردیابی ایجاد خواهیم کرد.
Copy file name to clipboardExpand all lines: content/chapter 4/4.25-profiling.md
+3-5Lines changed: 3 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,7 @@
1
1
---
2
2
title: 4.25 آموزش profiling
3
3
slug: profiling
4
-
weight: 7024
4
+
weight: 7029
5
5
---
6
6
7
7
پروفایلینگ یک تکنیک مفید برای شناسایی {{< tooltip text="گلوگاههای" note="bottlenecks" >}} {{< tooltip text="عملکرد" note="performance" >}}، بررسی مصرف حافظه و به دست آوردن بینش درباره سربار جمعآوری زباله (Garbage Collection) و موارد دیگر است. اکوسیستم Go ابزارهای فوقالعادهای برای این منظور ارائه میدهد. امکان فعال و غیرفعال کردن پروفایلینگ به ویژه هنگام رفع اشکال در یک برنامه CLI نوشته شده با Go بسیار مفید است.
@@ -101,8 +101,6 @@ func add(a, b int) int {
101
101
102
102
شاید در این مرحله این سوال برای شما پیش بیاید که چه اتفاقی میافتد اگر فضای پشته تمام شود. در زبانهایی مانند C، این موضوع باعث خطای سرریز پشته (stack overflow) میشود. اما در Go، این مشکل به صورت خودکار با ایجاد یک نسخه کپی از پشته که دو برابر بزرگتر است، مدیریت میشود. این قابلیت به goroutineها اجازه میدهد که با پشتههای بسیار کوچک، معمولاً 2 کیلوبایت، شروع کنند و یکی از عوامل اصلی مقیاسپذیری بیشتر goroutineها نسبت به نخهای سیستمعامل همین موضوع است.
103
103
104
-
یکی دیگر از جنبههای پشته، نحوه استفاده از آن در ایجاد ردیابی پشته (stack trace) است. این موضوع کمی پیشرفتهتر است، اما اگر علاقهمند هستید، میتوانید به مستندات «ردیابی پشته در Go» که در این مخزن موجود است، مراجعه کنید.
105
-
106
104
#### 4.25.1.2.2 هیپ (Heap)
107
105
108
106
تخصیصهای پشته عالی هستند، اما در بسیاری از موارد Go نمیتواند از آنها استفاده کند. رایجترین حالت زمانی است که باید اشارهگری به یک متغیر محلی از یک تابع بازگردانده شود. این موضوع را میتوان در نسخه اصلاحشده مثال تابع `add()` که در بالا آمد، مشاهده کرد:
@@ -134,7 +132,7 @@ Go این مشکل را با استفاده از جمعآوری زباله د
134
132
-**بازاستفاده (Reuse)**: تخصیصهای هیپ را دوباره استفاده کنید به جای اینکه آنها را با تخصیصهای جدید جایگزین کنید.
135
133
-**بازیافت (Recycle)**: برخی از تخصیصهای هیپ غیرقابل اجتناب هستند. بگذارید GC آنها را بازیافت کند و بر روی مسائل دیگر تمرکز کنید.
136
134
137
-
همانند مدل ذهنی قبلی در این راهنما، همه موارد بالا نمایی به شدت ساده شده از واقعیت است. اما امیدوارم که این مدل به اندازه کافی مفید باشد تا باقیمانده این راهنما را درک کنید و شما را به مطالعه مقالات بیشتری در این زمینه ترغیب کند. یکی از مقالاتی که حتماً باید بخوانید، مقاله «به Go رسیدن: سفر جمعآوری زباله Go» است که ایده خوبی از پیشرفتهای GC Go در طول سالها و سرعت بهبود آن ارائه میدهد.
135
+
همانند مدل ذهنی قبلی در این راهنما، همه موارد بالا نمایی به شدت ساده شده از واقعیت است. اما امیدوارم که این مدل به اندازه کافی مفید باشد تا باقیمانده این راهنما را درک کنید و شما را به مطالعه مقالات بیشتری در این زمینه ترغیب کند.
138
136
139
137
## 4.25.2 درک عمیق پروفایلرهای (Profilers) گو
140
138
@@ -159,7 +157,7 @@ Go این مشکل را با استفاده از جمعآوری زباله د
159
157
160
158
پروفایلر CPU در Go میتواند به شما کمک کند تا قسمتهایی از کد خود را که زمان CPU زیادی مصرف میکنند، شناسایی کنید.
161
159
162
-
⚠️ توجه داشته باشید که زمان CPU معمولاً با زمان واقعی که کاربران شما تجربه میکنند (که به آن تاخیر میگویند) متفاوت است. به عنوان مثال، یک درخواست HTTP معمولاً ممکن است ۱۰۰ میلیثانیه طول بکشد، اما تنها ۵ میلیثانیه از زمان CPU را مصرف کند و ۹۵ میلیثانیه را در انتظار پاسخ از پایگاه داده بگذراند. همچنین ممکن است یک درخواست ۱۰۰ میلیثانیه طول بکشد، اما ۲۰۰ میلیثانیه از زمان CPU را صرف کند اگر دو goroutine به طور همزمان کارهای پردازشی سنگین انجام دهند. اگر این موضوع برای شما گیجکننده است، لطفاً به بخش **برنامهریز goroutine** مراجعه کنید.
160
+
⚠️ توجه داشته باشید که زمان CPU معمولاً با زمان واقعی که کاربران شما تجربه میکنند (که به آن تاخیر میگویند) متفاوت است. به عنوان مثال، یک درخواست HTTP معمولاً ممکن است ۱۰۰ میلیثانیه طول بکشد، اما تنها ۵ میلیثانیه از زمان CPU را مصرف کند و ۹۵ میلیثانیه را در انتظار پاسخ از پایگاه داده بگذراند. همچنین ممکن است یک درخواست ۱۰۰ میلیثانیه طول بکشد، اما ۲۰۰ میلیثانیه از زمان CPU را صرف کند اگر دو goroutine به طور همزمان کارهای پردازشی سنگین انجام دهند. اگر این موضوع برای شما گیجکننده است.
163
161
164
162
شما میتوانید پروفایلر CPU را از طریق APIهای مختلف کنترل کنید:
Copy file name to clipboardExpand all lines: content/chapter 4/oop/4.23.1-encapsulation.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,7 @@
1
1
---
2
2
title: '4.23.1 کپسوله سازی (Encapsulation)'
3
3
slug: go-encapsulation
4
-
weight: 7951
4
+
weight: 7024
5
5
---
6
6
7
7
کپسوله سازی در زبان گو یا هر زبان دیگری یک مفهوم مشترک می باشد که شما یک داده یک تابع را پشت یک آبجکت یا یک واحد مستقل بپوشانید. با اینکار شما جلوی دسترسی مستقیم برروی داده را میگیرید. این کار در شی گرایی کمک می کند شما کدهای خود را بهتر سازماندهی کنید و جلوی دسترسی مستقیم ناخواسته را بگیرید.
Copy file name to clipboardExpand all lines: content/chapter 4/oop/4.23.2-inheritance.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,7 @@
1
1
---
2
2
title: '4.22.2 ارث بری'
3
3
slug: go-inheritance
4
-
weight: 7952
4
+
weight: 7025
5
5
---
6
6
7
7
در زبان گو ارث بری در واقع type embedding هست با استفاده [type embedding](../../../chapter-2/type-embedding/) می توانید یک type را داخل type دیگری جاسازی کنید و به واسطه type والد قابل دسترس است.
Copy file name to clipboardExpand all lines: content/chapter 4/oop/4.23.3-polymorphism.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,7 @@
1
1
---
2
2
title: '4.23.3 پلی مورفیسم (Polymorphism)'
3
3
slug: go-polymorphism
4
-
weight: 7953
4
+
weight: 7025
5
5
---
6
6
7
7
پلی مورفیسم یکی از مفاهیم مهم در شی گرایی می باشد و هدف استفاده از پلی مورفیسم این است بین آبجکت ها رفتار مشترکی ایجاد کنیم. در زبان گو شما می توانید یک اینترفیس تعریف کنید و برای ساختارهای مختلف متدهای اینترفیس را پیاده سازی کنید.
Copy file name to clipboardExpand all lines: content/chapter 4/oop/4.23.4-overriding.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,7 @@
1
1
---
2
2
title: '4.23.4 overriding'
3
3
slug: go-overriding
4
-
weight: 7954
4
+
weight: 7026
5
5
---
6
6
7
7
در زبان گو مثل سایر زبان های شی گرا امکان overriding مستقیم یک متد وجود ندارد اما در عوض شما می توانید با استفاده از [type embedding](../../../chapter-2/type-embedding/) و پیاده سازی متد یک اینترفیس این تکنیک را انجام دهید و به متدی که override انجام داده Shadow Method می گویند.
Copy file name to clipboardExpand all lines: content/chapter 4/oop/4.23.5-abstraction.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,7 +1,7 @@
1
1
---
2
2
title: '4.23.5 abstraction'
3
3
slug: go-abstraction
4
-
weight: 7955
4
+
weight: 7027
5
5
---
6
6
7
7
**Abstraction** (به معنای انتزاع)، فرآیند حذف یا از بین بردن برخی ویژگیهای غیرضروری یک چیز بهمنظور کاهش، خلاصهسازی و به کار بردن آن در مجموعهای از ویژگیهای ضروری است. در برنامهنویسی شیءگرا(OOP)، انتزاع یکی از سه مفهوم اصلی (به همراه مفاهیم Encapsulation و Inheritance) است.
0 commit comments