آموزش کار با Slices در برنامه نویسی GO

آموزش کار با Slices در برنامه نویسی GO

با آموزش کار با Slices در برنامه نویسی GO در چهاردهمین جلسه از آموزش برنامه نویسی Go در خدمت شما هستیم. لطفا تا انتهای جلسه ما رو همراهی نمایید.

آموزش کار با Slices در برنامه نویسی GO

Slice یا قطعات در زبان برنامه نویسی go یک برداشت از آرایه هاست همانطور که زبانGo به شما اجازه تعریف انواع متغیرها که میتوانند داده ها زیادی نگه دارند،را میدهد،اما هیچ متد داخلی برای افزایش سایز به صورت داینامیک یا ساخت زیر آرایه ندارداما Slice ها این محدودیت را ازبین می برند.و تابع های زیادی برای آرایه ها فراهم میکنند ودر Go بسیار کاربرد دارند.

Go Slice is an abstraction over Go Array. Go Array allows you to define variables that can hold several data items of the same kind but it does not provide any inbuilt method to increase its size dynamically or get a sub-array of its own. Slices overcome this limitation. It provides many utility functions required on Array and is widely used in Go programming.

تعریف یک Slice در برنامه نویسی Go

برای تعریف یکSlice میتوانید آن را به عنوان یک آرایه بدون تعیین سایز تعریف کنید

var numbers []int /* a slice of unspecified size */
/* numbers == []int{0,0,0,0,0}*/
numbers = make([]int,5,5) /* a slice of length 5 and capacity 5*/

 

توابع len() و cap() در برنامه نویسی Go

Slice یک نوع مفهوم وبرداشت از آرایه است.دراصل از آرایه و زیرمجموعه تابع structure.len() استفاده میکند و تعداد عناصر داخل Slice را برمیگردانددرحالیکه تابع cap() ظرفیت یک slice را برمیگرداند مقال زیر استفاده از این slice است.

package main

import "fmt"

func main() {
 var numbers = make([]int,3,5)
 
 printSlice(numbers)
}

func printSlice(x []int){
 fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}
پیشنمایش

 

خروجی کدبالا

len=3 cap=5 slice=[0 0 0]Nil slice

 

Nil slice در برنامه نویسی Go

اگر یک slice بدون ورودی تعریف شود،بعنوان یک slice بدون مقدار در نظر گرفته میشود وظرفیت آن صفر میشود

package main

import "fmt"

func main() {
 var numbers []int
 
 printSlice(numbers)
 
 if(numbers == nil){
 fmt.Printf("slice is nil")
 }
}

func printSlice(x []int){
 fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}
پیشنمایش

 

خروجی کدبالا

len = 0 cap = 0 slice = []
slice is nil

 

Subslicing در برنامه نویسی Go

Slice اجازه استفاده از زیر مجموعه(subslice) را نیز میدهد مثال زیر نمونه ای از این استفاده است

package main

import "fmt"

func main() {
 /* create a slice */
 numbers := []int{0,1,2,3,4,5,6,7,8} 
 printSlice(numbers)
 
 /* print the original slice */
 fmt.Println("numbers ==", numbers)
 
 /* print the sub slice starting from index 1(included) to index 4(excluded)*/
 fmt.Println("numbers[1:4] ==", numbers[1:4])
 
 /* missing lower bound implies 0*/
 fmt.Println("numbers[:3] ==", numbers[:3])
 
 /* missing upper bound implies len(s)*/
 fmt.Println("numbers[4:] ==", numbers[4:])
 
 numbers1 := make([]int,0,5)
 printSlice(numbers1)
 
 /* print the sub slice starting from index 0(included) to index 2(excluded) */
 number2 := numbers[:2]
 printSlice(number2)
 
 /* print the sub slice starting from index 2(included) to index 5(excluded) */
 number3 := numbers[2:5]
 printSlice(number3)
 
}

func printSlice(x []int){
 fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}
پیشنمایش

 

خروجی کد بالا

len = 9 cap = 9 slice = [0 1 2 3 4 5 6 7 8]
numbers == [0 1 2 3 4 5 6 7 8]
numbers[1:4] == [1 2 3]
numbers[:3] == [0 1 2]
numbers[4:] == [4 5 6 7 8]
len = 0 cap = 5 slice = []
len = 2 cap = 9  slice = [0 1]
len = 3 cap = 7 slice = [2 3 4]

 

توابع append() و copy() در برنامه نویسی Go

Slice به شما اجازه افزایش ظرفیت را بااستفاده از تابع append() می دهد.بااستفاده از تابع copy() محتوای Slice به Slice مقصد کپی میشود مثال:

package main

import "fmt"

func main() {
 var numbers []int
 printSlice(numbers)
 
 /* append allows nil slice */
 numbers = append(numbers, 0)
 printSlice(numbers)
 
 /* add one element to slice*/
 numbers = append(numbers, 1)
 printSlice(numbers)
 
 /* add more than one element at a time*/
 numbers = append(numbers, 2,3,4)
 printSlice(numbers)
 
 /* create a slice numbers1 with double the capacity of earlier slice*/
 numbers1 := make([]int, len(numbers), (cap(numbers))*2)
 
 /* copy content of numbers to numbers1 */
 copy(numbers1,numbers)
 printSlice(numbers1) 
}

func printSlice(x []int){
 fmt.Printf("len=%d cap=%d slice=%v\n",len(x),cap(x),x)
}

خروجی کد بالا به شرح زیر است

len = 0 cap = 0 slice = []
len = 1 cap = 2 slice = [0]
len = 2 cap = 2 slice = [0 1]
len = 5 cap = 8 slice = [0 1 2 3 4]
len = 5 cap = 16 slice = [0 1 2 3 4]

 

لیست مطالب جلسه قبل برنامه نویسی Go

  1. آموزش برنامه نویسی Go – زبان برنامه نویسی گو چیست؟ آشنایی با زبان و محیط برنامه نویسی Go
  2. آموزش برنامه نویسی Go – ساختار برنامه نویسی GO
  3. آموزش برنامه نویسی Go – قواعد برنامه نویسی GO
  4. آموزش برنامه نویسی Go – انواع داده در برنامه نویسی GO
  5. آموزش برنامه نویسی Go – کار با متغیر های برنامه نویسی GO
  6. آموزش کار با ثابت های برنامه نویسی GO
  7. ساخت تصمیم در GO و آموزش کار با عملگرها در برنامه نویسی GO
  8. آموزش کار با حلقه ها در برنامه نویسی GO
  9. آموزش کار با توابع در برنامه نویسی GO
  10. آموزش کار با Scope Rules در برنامه نویسی GO
  11. آموزش کار با آرایه در برنامه نویسی GO
  12. آموزش کار با اشاره گر ها در برنامه نویسی GO
  13. آموزش کار ساختار ها در برنامه نویسی GO

 

پیشنهاد ویژه 1 : مقالات و کتاب های آموزشی برنامه نویسی GO

پیشنهاد ویژه 2 : فیلم های آموزشی زبان برنامه نویسی GO

5/5 - (1 امتیاز)

راستی! برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام سورس باران عضو شوید.

پکیج صفر تا صد آموزش سئو و بهینه سازی بصورت عملی

دسته بندی موضوعات

آخرین محصولات فروشگاه

مشاهده همه

نظرات

بازخوردهای خود را برای ما ارسال کنید

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.