Skip to content

Commit

Permalink
fix: section and index note
Browse files Browse the repository at this point in the history
  • Loading branch information
Ja7ad committed Oct 16, 2024
1 parent cb5b8ce commit 89dbaa7
Show file tree
Hide file tree
Showing 10 changed files with 12 additions and 14 deletions.
2 changes: 1 addition & 1 deletion app/desktop/book.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import (
//go:embed content
var Book embed.FS

const VERSION = "6.1.2"
const VERSION = "6.1.3"

func main() {
port := flag.Int64("port", 8080, "port for listen and serve example 8080")
Expand Down
2 changes: 1 addition & 1 deletion content/_index.md
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ a {
این کتاب برای کسانی که تازه می‌خواهند زبان گو را یادبگیرند یا اینکه افراد باتجربه در زبان گو هستند، مناسب می‌باشد و همچنین اگر قصد دارید زبان گو را به عنوان استک جدید شروع کنید، این کتاب یک راهنمای کلی برای یادگیری زبان گو خواهد بود.

{{< hint info >}}
این کتاب تقدیم می‌شود به [#جادی_میرمیرانی](https://jadi.net/) که فعال حوزهٔ تکنولوژی‌های جدید و جامعهٔ نرم‌افزار آزاد و متن‌باز است.
این کتاب تقدیم می‌شود به [#جادی_میرمیرانی](https://jadi.net/)، فعال در حوزهٔ فناوری‌های نوین و جامعهٔ نرم‌افزارهای آزاد و متن‌باز. همچنین یادی کنیم از [مرحوم صابر راستی‌کردار](https://rastikerdar.github.io/vazirmatn/fa)، طراح فونت وزیر، که از اعضای فعال جامعهٔ نرم‌افزارهای آزاد و متن‌باز بود.
{{< /hint >}}

<div class="content">
Expand Down
2 changes: 1 addition & 1 deletion content/chapter 4/4.24-tracing.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: 4.24 آموزش tracing
slug: tracing
weight: 7023
weight: 7028
---

در این فصل، این مورد را یاد خواهیم گرفت که چگونه یک برنامه در حال اجرا را ردیابی کنیم و آن را با ابزار ردیابی مشاهده کنیم. در این حالت با استفاده از کتابخانه استاندارد، یک ردیابی ایجاد خواهیم کرد.
Expand Down
8 changes: 3 additions & 5 deletions content/chapter 4/4.25-profiling.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: 4.25 آموزش profiling
slug: profiling
weight: 7024
weight: 7029
---

پروفایلینگ یک تکنیک مفید برای شناسایی {{< tooltip text="گلوگاه‌های" note="bottlenecks" >}} {{< tooltip text="عملکرد" note="performance" >}}، بررسی مصرف حافظه و به دست آوردن بینش درباره سربار جمع‌آوری زباله (Garbage Collection) و موارد دیگر است. اکوسیستم Go ابزارهای فوق‌العاده‌ای برای این منظور ارائه می‌دهد. امکان فعال و غیرفعال کردن پروفایلینگ به ویژه هنگام رفع اشکال در یک برنامه CLI نوشته شده با Go بسیار مفید است.
Expand Down Expand Up @@ -101,8 +101,6 @@ func add(a, b int) int {

شاید در این مرحله این سوال برای شما پیش بیاید که چه اتفاقی می‌افتد اگر فضای پشته تمام شود. در زبان‌هایی مانند C، این موضوع باعث خطای سرریز پشته (stack overflow) می‌شود. اما در Go، این مشکل به صورت خودکار با ایجاد یک نسخه کپی از پشته که دو برابر بزرگتر است، مدیریت می‌شود. این قابلیت به goroutineها اجازه می‌دهد که با پشته‌های بسیار کوچک، معمولاً 2 کیلوبایت، شروع کنند و یکی از عوامل اصلی مقیاس‌پذیری بیشتر goroutineها نسبت به نخ‌های سیستم‌عامل همین موضوع است.

یکی دیگر از جنبه‌های پشته، نحوه استفاده از آن در ایجاد ردیابی پشته (stack trace) است. این موضوع کمی پیشرفته‌تر است، اما اگر علاقه‌مند هستید، می‌توانید به مستندات «ردیابی پشته در Go» که در این مخزن موجود است، مراجعه کنید.

#### 4.25.1.2.2 هیپ (Heap)

تخصیص‌های پشته عالی هستند، اما در بسیاری از موارد Go نمی‌تواند از آن‌ها استفاده کند. رایج‌ترین حالت زمانی است که باید اشاره‌گری به یک متغیر محلی از یک تابع بازگردانده شود. این موضوع را می‌توان در نسخه اصلاح‌شده مثال تابع `add()` که در بالا آمد، مشاهده کرد:
Expand Down Expand Up @@ -134,7 +132,7 @@ Go این مشکل را با استفاده از جمع‌آوری زباله د
- **بازاستفاده (Reuse)**: تخصیص‌های هیپ را دوباره استفاده کنید به جای اینکه آن‌ها را با تخصیص‌های جدید جایگزین کنید.
- **بازیافت (Recycle)**: برخی از تخصیص‌های هیپ غیرقابل اجتناب هستند. بگذارید GC آن‌ها را بازیافت کند و بر روی مسائل دیگر تمرکز کنید.

همانند مدل ذهنی قبلی در این راهنما، همه موارد بالا نمایی به شدت ساده شده از واقعیت است. اما امیدوارم که این مدل به اندازه کافی مفید باشد تا باقی‌مانده این راهنما را درک کنید و شما را به مطالعه مقالات بیشتری در این زمینه ترغیب کند. یکی از مقالاتی که حتماً باید بخوانید، مقاله «به Go رسیدن: سفر جمع‌آوری زباله Go» است که ایده خوبی از پیشرفت‌های GC Go در طول سال‌ها و سرعت بهبود آن ارائه می‌دهد.
همانند مدل ذهنی قبلی در این راهنما، همه موارد بالا نمایی به شدت ساده شده از واقعیت است. اما امیدوارم که این مدل به اندازه کافی مفید باشد تا باقی‌مانده این راهنما را درک کنید و شما را به مطالعه مقالات بیشتری در این زمینه ترغیب کند.

## 4.25.2 درک عمیق پروفایلرهای (Profilers) گو

Expand All @@ -159,7 +157,7 @@ Go این مشکل را با استفاده از جمع‌آوری زباله د

پروفایلر CPU در Go می‌تواند به شما کمک کند تا قسمت‌هایی از کد خود را که زمان CPU زیادی مصرف می‌کنند، شناسایی کنید.

⚠️ توجه داشته باشید که زمان CPU معمولاً با زمان واقعی که کاربران شما تجربه می‌کنند (که به آن تاخیر می‌گویند) متفاوت است. به عنوان مثال، یک درخواست HTTP معمولاً ممکن است ۱۰۰ میلی‌ثانیه طول بکشد، اما تنها ۵ میلی‌ثانیه از زمان CPU را مصرف کند و ۹۵ میلی‌ثانیه را در انتظار پاسخ از پایگاه داده بگذراند. همچنین ممکن است یک درخواست ۱۰۰ میلی‌ثانیه طول بکشد، اما ۲۰۰ میلی‌ثانیه از زمان CPU را صرف کند اگر دو goroutine به طور همزمان کارهای پردازشی سنگین انجام دهند. اگر این موضوع برای شما گیج‌کننده است، لطفاً به بخش **برنامه‌ریز goroutine** مراجعه کنید.
⚠️ توجه داشته باشید که زمان CPU معمولاً با زمان واقعی که کاربران شما تجربه می‌کنند (که به آن تاخیر می‌گویند) متفاوت است. به عنوان مثال، یک درخواست HTTP معمولاً ممکن است ۱۰۰ میلی‌ثانیه طول بکشد، اما تنها ۵ میلی‌ثانیه از زمان CPU را مصرف کند و ۹۵ میلی‌ثانیه را در انتظار پاسخ از پایگاه داده بگذراند. همچنین ممکن است یک درخواست ۱۰۰ میلی‌ثانیه طول بکشد، اما ۲۰۰ میلی‌ثانیه از زمان CPU را صرف کند اگر دو goroutine به طور همزمان کارهای پردازشی سنگین انجام دهند. اگر این موضوع برای شما گیج‌کننده است.

شما می‌توانید پروفایلر CPU را از طریق APIهای مختلف کنترل کنید:

Expand Down
2 changes: 1 addition & 1 deletion content/chapter 4/oop/4.23.1-encapsulation.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: '4.23.1 کپسوله سازی (Encapsulation)'
slug: go-encapsulation
weight: 7951
weight: 7024
---

کپسوله سازی در زبان گو یا هر زبان دیگری یک مفهوم مشترک می باشد که شما یک داده یک تابع را پشت یک آبجکت یا یک واحد مستقل بپوشانید. با اینکار شما جلوی دسترسی مستقیم برروی داده را میگیرید. این کار در شی گرایی کمک می کند شما کدهای خود را بهتر سازماندهی کنید و جلوی دسترسی مستقیم ناخواسته را بگیرید.
Expand Down
2 changes: 1 addition & 1 deletion content/chapter 4/oop/4.23.2-inheritance.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: '4.22.2 ارث بری'
slug: go-inheritance
weight: 7952
weight: 7025
---

در زبان گو ارث بری در واقع type embedding هست با استفاده [type embedding](../../../chapter-2/type-embedding/) می توانید یک type را داخل type دیگری جاسازی کنید و به واسطه type والد قابل دسترس است.
Expand Down
2 changes: 1 addition & 1 deletion content/chapter 4/oop/4.23.3-polymorphism.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: '4.23.3 پلی مورفیسم (Polymorphism)'
slug: go-polymorphism
weight: 7953
weight: 7025
---

پلی مورفیسم یکی از مفاهیم مهم در شی گرایی می باشد و هدف استفاده از پلی مورفیسم این است بین آبجکت ها رفتار مشترکی ایجاد کنیم. در زبان گو شما می توانید یک اینترفیس تعریف کنید و برای ساختارهای مختلف متدهای اینترفیس را پیاده سازی کنید.
Expand Down
2 changes: 1 addition & 1 deletion content/chapter 4/oop/4.23.4-overriding.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: '4.23.4 overriding'
slug: go-overriding
weight: 7954
weight: 7026
---

در زبان گو مثل سایر زبان های شی گرا امکان overriding مستقیم یک متد وجود ندارد اما در عوض شما می توانید با استفاده از [type embedding](../../../chapter-2/type-embedding/) و پیاده سازی متد یک اینترفیس این تکنیک را انجام دهید و به متدی که override انجام داده Shadow Method می گویند.
Expand Down
2 changes: 1 addition & 1 deletion content/chapter 4/oop/4.23.5-abstraction.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: '4.23.5 abstraction'
slug: go-abstraction
weight: 7955
weight: 7027
---

**Abstraction** (به معنای انتزاع)، فرآیند حذف یا از بین بردن برخی ویژگی‌های غیرضروری یک چیز به‌منظور کاهش، خلاصه‌سازی و به کار بردن آن در مجموعه‌ای از ویژگی‌های ضروری است. در برنامه‌نویسی شیءگرا(OOP)، انتزاع یکی از سه مفهوم اصلی (به همراه مفاهیم Encapsulation و Inheritance) است.
Expand Down
2 changes: 1 addition & 1 deletion content/chapter 4/oop/_index.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: '4.23 شی گرایی در زبان گو'
weight: 7950
weight: 7023
bookCollapseSection: true
---

Expand Down

0 comments on commit 89dbaa7

Please sign in to comment.