Skip to content

Commit

Permalink
Update 2.2-struct.md
Browse files Browse the repository at this point in the history
تصحیح متن
  • Loading branch information
r3a70 committed Jun 7, 2023
1 parent 5589325 commit 6e0c026
Showing 1 changed file with 10 additions and 15 deletions.
25 changes: 10 additions & 15 deletions content/chapter 2/2.2-struct.md
Original file line number Diff line number Diff line change
Expand Up @@ -195,28 +195,28 @@ 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
emp := employee{name: "Sam", age: 31, salary: 2000}
empP := &emp
```

حتی یک ساختار اشاره گر می تواند مستقیما ایجاد شود :
حتی شما میتوانید یک ساختار اشاره گر را مستقیما ایجاد کنید **این روش پینهاد میشود**. به مثال زیر توجه کنید:

```go
empP := &employee{name: "Sam", age: 31, salary: 2000}
```


به کد زیر توجه کنید :
در مثال زیر هر دو روش رو برای شما توضیح دادیم. با دقت به کد و خروجی کد نگاه کنید:‌

```go
package main
Expand All @@ -239,8 +239,6 @@ func main() {
```




```shell
$ go run main.go
Emp: &{name:Sam age:31 salary:2000}
Expand All @@ -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
Expand Down

0 comments on commit 6e0c026

Please sign in to comment.