Sobes.tech
Junior — Middle

Чӣ гуна метавон андозаи қисмро, ки ба функсия дар забони барномасозӣ дода мешавад, зиёд кард?

sobes.tech AI

Ҷавоб аз AI

Дар Go, парча (slice) — структура, ки дорои ишора ба массив, дарозӣ ва иқтидор мебошад. Агар шумо хоҳед, ки андозаи парчаро, ки ба функсия гузошта мешавад, зиёд кунед, метавонед инҳоро анҷом диҳед:

  • Парчаро бо арзиш гузаронед, аммо дар дохили функсия як парчои нав бо дарозии ё иқтидори зиёдшуда бо истифода аз функсияи append созед.
  • Агар хоҳед, ки худи парчоро тағир диҳед (масалан, дарозии онро зиёд кунед) ва тағирот дар берун ҳам дида шавад, метавонед ишорагӯ ба парчо (*[]T) гузаронед, пас дар дохили функсия метавонед парчоро такрор таъин кунед.

Масалан, дар дохили функсия парчоро бо баргардонидани парчои нав васеъ кардан:

func extendSlice(s []int, n int) []int {
    // Илова кардани n унсурҳои сифрӣ
    s = append(s, make([]int, n)...) 
    return s
}

func main() {
    s := []int{1, 2, 3}
    s = extendSlice(s, 2)
    fmt.Println(s) // [1 2 3 0 0]
}

Агар функсия бояд парчоро бидуни баргардон тағир диҳад, метавонед ишорагӯ истифода баред:

func extendSlicePtr(s *[]int, n int) {
    *s = append(*s, make([]int, n)...) 
}

func main() {
    s := []int{1, 2, 3}
    extendSlicePtr(&s, 2)
    fmt.Println(s) // [1 2 3 0 0]
}

Тавре ки мебинем, барои зиёд кардани андозаи парча дар дохили функсия, бояд ё парчоро нав баргардонед ё ишорагӯ ба парчо гузаронед.