From 6e0c02630be76983c3b6fdedc52a4131735da3c4 Mon Sep 17 00:00:00 2001 From: r3a70 <96728703+r3a70@users.noreply.github.com> Date: Wed, 7 Jun 2023 19:00:40 +0330 Subject: [PATCH] Update 2.2-struct.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit تصحیح متن --- content/chapter 2/2.2-struct.md | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/content/chapter 2/2.2-struct.md b/content/chapter 2/2.2-struct.md index b3960ad11..c7540cc6b 100644 --- a/content/chapter 2/2.2-struct.md +++ b/content/chapter 2/2.2-struct.md @@ -195,13 +195,13 @@ New name is: John ## 2.2.4 کار با اشاره گر (Pointer) در ساختار (struct) -شما برای ایجاد یک struct از نوع {{< tooltip text="اشاره گر" note="Pointer" >}} از دو حالت زیر می توانید استفاده کنید : +شما برای ایجاد یک struct از نوع {{< tooltip text="اشاره گر" note="Pointer" >}} می توانید از دو حالت زیر استفاده کنید : - با استفاده از عملگر `&` که اشاره به خانه حافظه دارد - با استفاده از تابع `new` ### 2.2.4.1 ایجاد ساختار با استفاده عملگر & -برای اینکه بتوانید یک ساختار از نوع {{< tooltip text="اشاره گر" note="Pointer" >}} ایجاد کنید می توانید از عملگر `&` استفاده کنید. +برای اینکه بتوانید یک ساختار از نوع {{< tooltip text="اشاره گر" note="Pointer" >}} ایجاد کنید می توانید از عملگر `&` استفاده کنید. به مثال زیر توجه کنید: ```go @@ -209,14 +209,14 @@ emp := employee{name: "Sam", age: 31, salary: 2000} empP := &emp ``` -حتی یک ساختار اشاره گر می تواند مستقیما ایجاد شود : +حتی شما میتوانید یک ساختار اشاره گر را مستقیما ایجاد کنید **این روش پینهاد میشود**. به مثال زیر توجه کنید: ```go empP := &employee{name: "Sam", age: 31, salary: 2000} ``` -به کد زیر توجه کنید : +در مثال زیر هر دو روش رو برای شما توضیح دادیم. با دقت به کد و خروجی کد نگاه کنید:‌ ```go package main @@ -239,8 +239,6 @@ func main() { ``` - - ```shell $ go run main.go Emp: &{name:Sam age:31 salary:2000} @@ -252,34 +250,31 @@ Emp: &{name:John age:30 salary:3000} ```go func new(Type) *Type ``` +همینطور که در تعریف تابع `new` هم میبینید, این تابع یک تایپ از ما میگیرد و مقدار دهی میکنید, و در آخر هم تایپ را از نوع اشاره گر برای ما برمیگرداند. با استفاده از تابع `new ` : - شما یک ساختار ایجاد می کنید. -- سپس فیلدها با مقدار پیش فرض صفر مقدار دهی اولیه می شوند. +- سپس فیلدها, با مقدار پیش فرض صفر مقدار دهی اولیه می شوند. - در نهایت ساختار شما از نوع اشاره گر بازگشت داده می شود. +به مثال زیر توجه کنید: ```go empP := new(employee) ``` -برای اینکه آدرس خانه حافظه ساختار از نوع اشاره گر را ببینید کافیه : +برای اینکه آدرس خانه حافظه ساختار, از نوع اشاره گر را ببینید کافی است با استفاده از **p%** اون ساختار رو چاپ کنید. به مثال زیر توجه کنید : ```go fmt.Printf("Emp Pointer: %p\n", empP) ``` -برای اینکه مقدار هر یک از فیلدها را ببینید کافیه : +برای اینکه مقدار کلی فیلدها را ببینید کافی است با استفاده از **v+%** اون رو چاپ کنید. به مثال زیر توجه کنید : ```go fmt.Printf("Emp Value: %+v\n", *empP) ``` -```shell -$ go run main.go -Emp Value: {name: age:0 salary:0} -``` - -در زیر یک کد نمونه قرار دادیم به عنوان مثال : +در مثال زیر خروجی آنچه در بالا گفته شد رو قرار دادیم. لطفا با دقت به مثال زیر نگاه کنید و در آخر هم مثال های مشابهی رو برای خودتون بنویسید: ```go package main