برش ها یک نوع داده کلیدی در زبان GO هستند ، که یک رابط قدرتمندتری را برای رشته ای از آرایه ها فراهم می کنند.
package main import "fmt" func main() {
بر خلاف آرایه ها، برش ها فقط توسط عناصر حاوی آنها (نه شماره عناصر آنها) تایپ می شوند. برای تولید یک برش غیر خالی با طول غیر صفر از تابع درونی make استفاده کنید. در اینجا ما یک آرایه برشی از نوع رشته و با طول سه با تابع درونی make میسازیم.
s := make([]string, 3) fmt.Println("emp:", s)
ما میتونیم شبیه دستورات "set" و "get" رو با آرایه ها بسازیم.
s[0] = "a" s[1] = "b" s[2] = "c" fmt.Println("set:", s) fmt.Println("get:", s[2])
تابع len
همونطور که انتظار داریم طول یک برش رو برای ما برمیگردونه.
fmt.Println("len:", len(s))
علاوه این عملیات های پایه ساده , برشها چندین قابلیت اضافه تر نسبت به آرایه ها را پشتییبانی میکنند. یکی از این قابلیت ها استفاده از تابع درونی append
است که باعث میشه بتونیم یک یا چند مقدار را به برش خود اضافه کنیم و برگردونیم. توجه کنید که مقداری که تابع append
برمیگرداند را باید قبول کنیم چون یک برش جدید را به ما میدهد.
s = append(s, "d") s = append(s, "e", "f") fmt.Println("apd:", s)
همچنین برشها میتونن copy
بشن.اینجا ما یک برش خالی c
میسازیم که طولی برابر با طول s
داره و محتویات s
رو به c
کپی میکنیم.
c := make([]string, len(s)) copy(c, s) fmt.Println("cpy:", c)
برشها یک جدا کننده به نحو[ slice[low:high
را پشتیبانی میکنند. برای مثال عبارت زیر عناصر [s[2]
, s[3]
, s[4
. را جدا کرده و به دست میدهد
l := s[2:5] fmt.Println("sl1:", l)
مثال زیر از عنصر با اندیس صفر تا پنج را ادامه میدهد (به جز خوده 5) [s[5
.
l = s[:5] fmt.Println("sl2:", l)
و این جدا کننده از عنصر با اندیس 2 تا آخرین عنصر اندیس را پوشش میدهد( عنصر اندیس 2 هم پوشش داده میشود) [s[2
.
l = s[2:] fmt.Println("sl3:", l)
ما میتونیم متغیر هامون رو با برشها به خوبی تعریف و مقدار دهی اولیه نماییم.
t := []string{"g", "h", "i"} fmt.Println("dcl:", t)
برش ها میتونن به ساختمان داده های چند بعدی متصل شوند. طول برشها چند بعدی میتونه خیلی متفاوت تر از آرایه ها چند بعدی باشه.
twoD := make([][]int, 3) for i := 0; i < 3; i++ { innerLen := i + 1 twoD[i] = make([]int, innerLen) for j := 0; j < innerLen; j++ { twoD[i][j] = i + j } } fmt.Println("2d: ", twoD) }
توجه داشته باشید در حالی که برشها نوع متفاوتی از آرایه ها هستند ، اما آنها نیز به صورت مشابه با fmt.Println ارائه و نمایش داده میشن.
$ go run slices.go emp: [ ] set: [a b c] get: c len: 3 apd: [a b c d e f] cpy: [a b c d e f] sl1: [c d e] sl2: [a b c d e] sl3: [c d e f] dcl: [g h i] 2d: [[0] [1 2] [2 3 4]]
برای کسب اطلاعات بیشتر در مورد طراحی و اجرای برش ها در GO، این مقاله فوق العاده و جامع را که تیم Go تهیه کرده است بررسی کنید.
تا اینجای کار ما با هم آرایه ها و برشها و رو بررسی کردیم در مبحث بعدی به سراغ ساختمان داده دیگری در گو میرویم : آرایه انجمنی map
<<آرایه ها-----------------------------------------------آرایه map>>