GoDasturchi
Growing a Slice

Growing a Slice

Slicani kengaytirish

example.go
endpoints := []string{"/api/users"}
endpoints = append(endpoints, "/api/orders")
fmt.Println(endpoints) // [/api/users /api/orders]

append funksiyasi — slicelarning o'sish usuli. U slice va bitta yoki bir nechta qiymatni qabul qiladi, so'ng o'sha qiymatlar qo'shilgan yangi slicani qaytaradi. Muhim qoida: natijani doim qaytadan belgilang.

example.go
append(endpoints, "/api/orders")             // xato: natija tashlab yuboriladi
endpoints = append(endpoints, "/api/orders") // to'g'ri: endpoints endi uni o'z ichiga oladi

Nega? append asl slicani o'zgartirmaydi. U qo'shimcha element bilan yangisini yaratadi va uni qaytaradi. Agar qaytish qiymatini ushlamasangiz, yangi slice yo'qoladi.

Bir vaqtda bir nechta qiymat ham qo'shishingiz mumkin:

example.go
endpoints = append(endpoints, "/api/products", "/api/health")

>_ Exercise

Slicaga bitta ruxsatnoma qo'shib, yangilangan slicani qaytaradigan AddPermission(permissions []string, permission string) []string funksiyasini yozing.

Misollar:

example.go
AddPermission(["read"], "write")            ["read", "write"]
AddPermission([], "admin")                  ["admin"]
AddPermission(["read", "write"], "delete")  ["read", "write", "delete"]

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

append natijasini doim qaytadan belgilang: s = append(s, val). Asl slice hech qachon joyida o'zgartirilmaydi.

NEXT UP

Walking the List

OUTPUT

$ go run main.go
Kodingizni ishga tushiring

Growing a Slice

Slicani kengaytirish

example.go
endpoints := []string{"/api/users"}
endpoints = append(endpoints, "/api/orders")
fmt.Println(endpoints) // [/api/users /api/orders]

append funksiyasi — slicelarning o'sish usuli. U slice va bitta yoki bir nechta qiymatni qabul qiladi, so'ng o'sha qiymatlar qo'shilgan yangi slicani qaytaradi. Muhim qoida: natijani doim qaytadan belgilang.

example.go
append(endpoints, "/api/orders")             // xato: natija tashlab yuboriladi
endpoints = append(endpoints, "/api/orders") // to'g'ri: endpoints endi uni o'z ichiga oladi

Nega? append asl slicani o'zgartirmaydi. U qo'shimcha element bilan yangisini yaratadi va uni qaytaradi. Agar qaytish qiymatini ushlamasangiz, yangi slice yo'qoladi.

Bir vaqtda bir nechta qiymat ham qo'shishingiz mumkin:

example.go
endpoints = append(endpoints, "/api/products", "/api/health")

>_ Exercise

Slicaga bitta ruxsatnoma qo'shib, yangilangan slicani qaytaradigan AddPermission(permissions []string, permission string) []string funksiyasini yozing.

Misollar:

example.go
AddPermission(["read"], "write")            ["read", "write"]
AddPermission([], "admin")                  ["admin"]
AddPermission(["read", "write"], "delete")  ["read", "write", "delete"]

Stuck? Reveal a hint to help you.

Hints (0/3)

Key Takeaway

Key Takeaway:

append natijasini doim qaytadan belgilang: s = append(s, val). Asl slice hech qachon joyida o'zgartirilmaydi.

NEXT UP

Walking the List